paw*_*que 4 match elasticsearch
我想显示哪些词与返回文档的多词查询不匹配。是否有查询类型或参数来实现这一点?
通常,此类不匹配的单词会以删除线字体显示给用户:
得到答案后的示例查询:
POST /posts/_search
{
"query": {
"bool": {
"should": [
{"match": {"name": {"query": "jogging rain"}}},
{"match": {"name": {"query": "jogging", "_name": "jogging"}}},
{"match": {"name": {"query": "rain", "_name": "rain"}}}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我们找到一个包含单词jogging
但不包含 的文档rain
,我们会得到如下结果:
{
"_source": {
"name": "jogging"
},
"matched_queries": [
"jogging"
]
}
Run Code Online (Sandbox Code Playgroud)
然后在下一步中,我从初始搜索中减去matched_queries
, ie的内容,即结果:就是我想要的。"jogging"
"jogging rain"
"rain"
感谢@Val 关于如何解决这个问题的想法!
您可以为此使用命名查询,方法是为每个查询命名。在结果中,每个命中都将包含一个matched_queries
包含匹配的查询名称的数组(例如unmatched_query
和strikethrough_query
以下)。然后,您可以在客户端使用该信息来构建不匹配的单词的删除线列表。
{
"query": {
"bool": {
"should": [
{
"match": {
"content": {
"query": "unmatched",
"_name": "unmatched_query"
}
}
},
{
"match": {
"content": {
"query": "strikethrough",
"_name": "strikethrough_query"
}
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
700 次 |
最近记录: |