搜索多个单词,标记不匹配的单词

时间:2016-09-29 15:31:59

标签: elasticsearch

假设在搜索词中查询“house garden garage”。索引中的文档仅包含“房屋,花园”,“花园,车库”和“房屋车库”,但没有文档包含所有三个单词。

目前,使用split_keyword分析器和运算符“AND”构建查询。所以查询不会返回任何结果。

但如果省略一个搜索词,就会有结果。

是否可以返回仅匹配3个术语的子集的文档并在结果中获取省略的术语?

目前,我看到的唯一方法是以“OR”作为运算符执行查询并启用解释并获取每个字段的单个单词的分数,并找到不匹配的术语。但这似乎非常无意。

1 个答案:

答案 0 :(得分:0)

我认为Named Queries在这里会非常有用。您可以在带有_name param的should子句中编写查询,以找出与例如

匹配的单词
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "your_field": {
              "query": "house",
              "_name" : "house"
            }
          }
        },
        {
          "match": {
            "your_field": {
              "query": "garden",
              "_name" : "garden"
            }
          }
        },
        {
          "match": {
            "your_field": {
              "query": "garage",
              "_name" : "garage"
            }
          }
        }
      ]
    }
  }
}

在结果中检查matched_queries字段,它会告诉您哪些字词匹配,然后您就可以找出哪些字词被省略