我试图了解如何在Redisearch中严格使用“ begins with”(开始于)进行查询,并且不断收到“ contains”。
例如,如果我的字段具有诸如'football','myfootball','greenfootball'之类的值,并提供如下搜索词:
> FT.SEARCH myIdx @myfield:foot*
我只想获取“足球”信息,但我一直在获取包含该单词的其他字段,而不是以该单词开头。
有办法避免这种情况吗?
我试图使用VERBATIM
和类似的东西,@myfield:^foot*
但一无所获。
我使用JRedisearch作为客户端,但最终我不得不进入数据库并手动执行这些查询,以了解正在发生的事情。话虽这么说,目前这可能与该客户有关吗?
谢谢
编辑我的索引设置的示例:
Client client = new Client(INDEX_NAME, url, PORT);
Schema sc = new Schema().addSortableTextField("url", 1.0); // using this field for query
client.dropIndex(true);
client.createIndex(sc, Client.IndexOptions.Default());
return client;
样本文件:
id: // random uuid
urlPath: myfootbal
application: web
market: Europe
在检查了提供的RDB之后,我发现在搜索foot *时,您并没有感到不适。答复如下:/dot-com/plp/football/x/index.html。之所以会得到这些答复,是因为此URL已被标记化,并且'/'是标记化字符之一。如果您不希望对这些URL进行标记,则需要将其声明为TAGS而不是TEXT。这样,整个网址将按原样编制索引,当搜索foot *时,它不会出现在结果中。
有关TAGS的更多信息,请参见FT.CREATE文档:https ://oss.redislabs.com/redisearch/Commands.html
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句