使用 "begin with" 而不是 "contains" 重新搜索查询

Redisearch query with "begin with" instead of "contains"

我正在尝试了解如何严格使用 "begins with" 在 Redisearch 中执行查询,并且我不断收到 "contains"。

例如,如果我的字段的值类似于 'football''myfootball''greenfootball' 并会提供这样的搜索词:

> FT.SEARCH myIdx @myfield:foot*

我只想获取 'football' 但我一直在获取包含该词而不是以该词开头的其他字段。

有没有办法避免这种情况?

我曾尝试使用 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* 时您没有找到 myfootbal。回复如下所示:/dot-com/plp/football/x/index.html。您收到这些回复是因为此 url 已标记化,并且“/”是标记化字符之一。如果您不希望这些 url 被标记化,您需要将它们声明为 TAGS 而不是 TEXT。这样整个 url 将按原样编入索引,搜索 foot* 时它不会出现在结果中。

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