无法在elasticsearch中搜索数组

时间:2014-10-27 07:50:30

标签: elasticsearch

我在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"
        }
      }
    }
  }
}

}     }

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

1 个答案:

答案 0 :(得分:2)

"期限"过滤器不会被分析,这意味着它们将匹配精确的术语,而不需要小写,无需任何其他过滤或处理。因此,您的查询将通过完全匹配"德国"来查看倒排索引,而如果您在ES中放置这两个文档时使用标准分析器,则它们将被记录为"德国&# 34; (小写)和"法国"小写。

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

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

另一方面,"匹配"我们将对您的查询进行分析,因此,如果您正在寻找"德国",那么这将匹配:

{
  "query": {
    "filtered": {
      "query": {
        "bool": {
          "must": [
            {"match": {
              "countries": "Germany"
            }}
          ]
        }
      }
    }
  }
}