Java 使用“重新搜索查询”;以“开始”;而不是",;包括「;
我试图理解如何严格地用“begins with”来执行RedSearch中的查询,并且我一直得到“contains” 例如,如果我有值为“football”、“myfootball”、“greenfootball”的字段,并提供如下搜索词:Java 使用“重新搜索查询”;以“开始”;而不是",;包括「;,java,redis,redisearch,Java,Redis,Redisearch,我试图理解如何严格地用“begins with”来执行RedSearch中的查询,并且我一直得到“contains” 例如,如果我有值为“football”、“myfootball”、“greenfootball”的字段,并提供如下搜索词: >FT.SEARCH myIdx@myfield:foot* 我只想得到‘football’,但我一直得到其他包含该词的字段,而不是以该词开头 有没有办法避免这种情况 我试图使用逐字记录和类似@myfield:^foot*的东西,但什么都没有 我使用JRed
>FT.SEARCH myIdx@myfield:foot*
我只想得到‘football’,但我一直得到其他包含该词的字段,而不是以该词开头
有没有办法避免这种情况
我试图使用逐字记录
和类似@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*时,您没有得到MyFootball。回复如下所示:/com/plp/football/x/index.html。您得到这些回复是因为此url已标记化,“/”是标记化字符之一。如果不希望这些URL被标记化,则需要将它们声明为标记而不是文本。这样,整个url将按原样编制索引,当搜索foot*时,它将不会出现在结果中
有关标签的更多信息,请参阅FT.CREATE文档:能否发布完整示例(您存储的文档)?@GuyKorland,已更新,希望如此。您还可以添加一些文档示例吗?问题是RedSearch不支持contains(仅支持前缀)。所以我不明白你是怎么得到的。Gone需要一个创建此问题的完整示例才能提供帮助。我明白,如果您执行:FT.SEARCH myIdx@urlPath:foot*您要取回我的足球?@meirshpillaien,是的,这正是我的情况。抱歉耽搁了,我当时在Spring I/O:)我没有提到我的领域中有
/
,对此表示抱歉。然而,当谈到标记化时,文档并没有提到任何关于正向斜杠的内容它指定了以下字段:,.{}[]”:;!@$%^&*()-+=~
。至少我不清楚这是问题所在,并且正斜杠是标记化的。此外,通过使用标记,我失去了进行通配符搜索的好处(例如:/gts/foot*
等等)这不是我想要的。你可以用标签做前缀,这样你就不会失去这个能力。