我有一个健身计划的elasticsearch索引。我想匹配计划标题,但仅执行文本匹配会导致问题。当搜索“减重”时,我看到了“减重”计划的最高结果,但第二个结果是“增重”计划。我怎么才能不把“体重减轻”和“体重增加”匹配起来呢?我正在寻找一种理解查询语义的方法,而不仅仅是文本匹配。
发布于 2021-09-14 11:25:06
如果要求文档包含所有单词"Weight“和"Loss”,请使用匹配运算符and。
我假设你在全文match dsl中搜索"weight loss“一词。Elasticsearch将通过an analyzer分析你的查询:字符过滤器,标记器,令牌过滤器,所以这取决于你的相应设置。
如果您使用默认设置,搜索词"Weight Loss“将被分析并标记为"weight”和"loss“。由于default operator of match query为OR,因此它将匹配包含“”或“”的文档,因此您的“体重增加”文档也会被捕获。
为了只匹配包含“”和“”两个单词的文档,您需要在匹配查询中显式地使用运算符and。
搜索查询应如下所示
{
"query": {
"match": {
"<your_document_field_name>": {
"query": "Weight Loss",
"operator": "and"
}
}
}
}https://stackoverflow.com/questions/69166731
复制相似问题