我使用Redis和RedisJSON和RediSearch模块,我对RediSearch模块有一个问题,特别是FT. SEARCH。
我的索引如下所示:FT.CREATE chainIdIdx ON JSON PREFIX 1 chain-id. SCHEMA $.message-ids.*.redis-routing-key AS routingkeys TAG $.updated-at AS updatedAt TEXT SORTABLE
目前有超过200万个带有前缀chain-id的关键字条目。*
以下是搜索呼叫:
1.)随便看看第一个叫:FT.SEARCH "chainIdIdx" * SORTBY updatedAT DESC LIMIT 0 2
搜寻结果:匹配的文档总数为182299
| 文件|更新时间|美元|
| - -|- -|- -|
| chain-id.111111 |2022年11月13日20时41分53秒|【......】|
| chain-id.aaaaaa |2022年11月13日20时41分52秒|【......】|
2.)随便看看第二个电话:FT.SEARCH "chainIdIdx" * SORTBY updatedAT DESC LIMIT 0 2
搜寻结果:匹配的文档总数为298499。
| 文件|更新时间|美元|
| - -|- -|- -|
| chain-id.222222 |2022年11月10日22时39分16秒|【......】|
| chain-id.bbbbbb |2022年11月10日22时39分15秒|【......】|
匹配的文档总数,甚至每次调用的结果都不相同。
为什么会有区别呢?我期望它是相同的数量和相同的结果。另一件事是,最新的数据库键应该显示,这将是(现在)一个updatedAt值,如2022-12-01 xx:xx:xx。
密钥已正确存储在数据库中,但搜索结果与预期不符。
我试着用另一种方式设置索引,但它使情况变得更糟。而且我不确定这是一个配置的事情还是任何方式的限制,因为键的数量是巨大的,而且会增长。
1条答案
按热度按时间toe950271#
搜索超时并返回到目前为止所找到的内容。默认情况下,超时设置为500 ms。您可以通过使用FT.CONFIG命令、更改redis.conf文件以及其他几种方法来更改这种行为和超时。我将向您展示如何使用Redis命令来实现这一点,但您可以--而且可能希望a a自己读取all the gory details。
要更改超时值,只需提供一个以毫秒为单位的新值:
将其设置为0将禁用超时。
超时时的默认行为是只返回到目前为止找到的内容。但是,您可以更改它,使RediSearch errors 在超时时:
如果要将其设置回默认值并仅返回到目前为止已获取的内容:
希望这对你有帮助!