我在Elasticsearch中有这些文件:

{
    "id_object": "9",
    "size_id": "-1",
    "enabled": 1,
    "verified": 0,
    "countries": [
       "Germany"
    ]
},
{
    "id_object": "19",
    "size_id": "-1",
    "enabled": 1,
    "verified": 0,
    "countries": [
       "Germany",
       "France"
    ]
}

我使用以下查询来提取内部具有“德国”的所有文档:
GET abc/def/_search
{
  "query": {
    "filtered": {
      "filter": {
    "bool": {
      "must": {
        "term": {
          "countries": "Germany"
        }
      }
    }
  }
}

}
}

但它没有返回结果!
我究竟做错了什么?

最佳答案

不对“术语”过滤器进行分析,这意味着它们将与确切的术语匹配,无需使用小写字母,无需进行任何其他过滤或处理。因此,您的查询将按完全匹配的“德国”查询倒排索引,而如果您在将这两个文档放入ES时使用标准分析器,则它们将被记录为“德国”(小写)和“france”小写。

因此,在您的情况下,您的过滤器将如下所示进行匹配:

{   "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": {
            "term": {
              "countries": "germany"
            }
          }
        }
      }
    }}}

另一方面,将分析“匹配”查询,因此,如果您要查找“德国”,那么它将匹配:
{
  "query": {
    "filtered": {
      "query": {
        "bool": {
          "must": [
            {"match": {
              "countries": "Germany"
            }}
          ]
        }
      }
    }
  }
}

09-06 04:02