elasticsearch - 在 Elasticsearch 结果中显示不匹配的词

标签 elasticsearch match

我想显示哪些词与返回文档的多词查询不匹配。是否有查询类型或参数来实现此目的?

通常,这些不匹配的词会以删除线字体显示给用户:

Missing word


得到答案后的示例查询:

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_querystrikethrough_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/

相关文章:

elasticsearch - 如何使用Elasticsearch方面查询对结果进行分组

elasticsearch - Elasticsearch只从头开始搜索

python - 在 Python 中使用正则表达式匹配输入

JavaScript 或 jQuery 使用数据属性比较两个有序列表

elasticsearch - 使用独立的 Elasticsearch 运行 netflix 指挥?

elasticsearch - 创建索引的未知键 [高]

elasticsearch - 对Kibana的只读OAuth访问

jquery - 在 jQuery 中过滤具有多个记录 ID 的分层 JSON 数据

java - 将整个句子与正则表达式匹配

javascript - 在 .match() 中使用一个点