【发布时间】:2021-11-08 23:38:56
【问题描述】:
我有一个带有健身计划的弹性搜索索引。我想匹配计划标题,但只进行文本匹配会导致问题。 在搜索“减肥”时,我看到“减肥”计划的最高结果,但第二个结果是“体重增加”计划。 我如何不将“减肥”与“体重增加”相匹配?我正在寻找一种我理解查询语义的方法,而不仅仅是文本匹配。
【问题讨论】:
-
您要获取数据的查询是什么,请添加示例文档
标签: elasticsearch
我有一个带有健身计划的弹性搜索索引。我想匹配计划标题,但只进行文本匹配会导致问题。 在搜索“减肥”时,我看到“减肥”计划的最高结果,但第二个结果是“体重增加”计划。 我如何不将“减肥”与“体重增加”相匹配?我正在寻找一种我理解查询语义的方法,而不仅仅是文本匹配。
【问题讨论】:
标签: elasticsearch
如果您要求文档包含所有单词“Weight”和“Loss”,请使用匹配运算符and
我假设您使用带有“减肥”一词的全文match dsl 进行搜索。 Elasticsearch 将通过 an analyzer 分析您的查询,其中包括:字符过滤器、标记器、标记过滤器,因此这取决于您的相应设置。
如果您使用默认设置,搜索词“Weight Loss”将被分析并标记为“weight”和“loss”。由于default operator of match query 是OR,所以它将匹配包含“weight”OR“loss”的文档,因此您的“Weight Gain”文档也会被捕获。
要仅匹配包含“Weight”AND“Loss”这两个词的文档,您需要在匹配查询中明确使用运算符and。
您的搜索查询应如下所示
{
"query": {
"match": {
"<your_document_field_name>": {
"query": "Weight Loss",
"operator": "and"
}
}
}
}
【讨论】: