使用“开始于”而不是“包含”的Redisearch查询

时间:2019-05-15 15:11:18

标签: java redis redisearch

我试图理解如何在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

1 个答案:

答案 0 :(得分:1)

检查提供的RDB后,我发现在搜索英尺*时,您并没有感到不适。答复如下所示:/dot-com/plp/football/x/index.html。之所以会得到这些答复,是因为该URL已被标记化,并且'/'是标记化字符之一。如果您不希望对这些URL进行标记,则需要将其声明为TAGS而不是TEXT。这样,整个网址将按原样编制索引,当搜索foot *时,它不会出现在结果中。

有关TAGS的更多信息,请参见FT.CREATE文档:https://oss.redislabs.com/redisearch/Commands.html