我想显示哪些词与返回文档的多词查询不匹配。是否有查询类型或参数来实现此目的?
通常,这些不匹配的词会以删除线字体显示给用户:
得到答案后的示例查询:
POST /posts/_search
{
"query": {
"bool": {
"should": [
{"match": {"name": {"query": "jogging rain"}}},
{"match": {"name": {"query": "jogging", "_name": "jogging"}}},
{"match": {"name": {"query": "rain", "_name": "rain"}}}
]
}
}
}
现在,如果我们找到包含单词 jogging
而不是 rain
的文档,我们将得到如下结果:
{
"_source": {
"name": "jogging"
},
"matched_queries": [
"jogging"
]
}
然后在下一步中,我从初始搜索中减去 matched_queries
的内容,即 "jogging"
,即 "jogging rain"
结果:"rain"
是我想要的。
感谢@Val 提供解决此问题的想法!
最佳答案
你可以使用 named queries为此,通过为每个查询命名。在结果中,每个命中都将包含一个 matched_queries
数组,其中包含匹配的查询的名称(例如下面的 unmatched_query
和 strikethrough_query
)。然后,您可以在客户端使用该信息来构建一个带删除线的不匹配单词列表。
{
"query": {
"bool": {
"should": [
{
"match": {
"content": {
"query": "unmatched",
"_name": "unmatched_query"
}
}
},
{
"match": {
"content": {
"query": "strikethrough",
"_name": "strikethrough_query"
}
}
}
]
}
}
}
关于elasticsearch - 在 Elasticsearch 结果中显示不匹配的词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35556004/