我想显示返回文档的多单词查询不匹配哪些单词。是否有查询类型或参数来实现此目的?
通常,此类不匹配的单词会以删除线字体显示给用户:
我得到答案后的示例查询:
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
, i.e. "jogging"
从最初的搜索,即"jogging rain"
结果:"rain"
就是我想要的。
感谢@Val 提出如何解决这个问题的想法!
你可以使用命名查询 https://www.elastic.co/guide/en/elasticsearch/reference/2.2/search-request-named-queries-and-filters.html为此,为每个查询指定一个名称。在结果中,每次点击都会有一个matched_queries
包含匹配查询名称的数组(例如unmatched_query
and strikethrough_query
以下)。然后,您可以在客户端使用该信息来构建不匹配单词的删除线列表。
{
"query": {
"bool": {
"should": [
{
"match": {
"content": {
"query": "unmatched",
"_name": "unmatched_query"
}
}
},
{
"match": {
"content": {
"query": "strikethrough",
"_name": "strikethrough_query"
}
}
}
]
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)