elasticsearch中的数组中没有匹配项

时间:2017-03-31 14:55:41

标签: elasticsearch

我正在使用elasticsearch 5.2.2。

在我的索引中,我的数据看起来像这样:

{
    "_index": "index",
    "_type": "273caf76-ec03-478c-b980-9743180bc863",
    "_id": "eee46e24-f383-4ae7-8930-dc3836e030a5",
    "_score": 3.41408,
    "_source": {
      "Father Name": [
        {
          "id": "some id",
          "value": "Some value test test"
        }
      ],
      "Mother Name": [
        {
          "id": "some id",
          "value": "Another value haha"
        }
      ],
      "Other values": [{ id: "", value: ""}]
    }
}

当我用_all搜索时,一切正常,我可以找到所有结果合理的分数

{"query":{"match":{"_all":"value"}},"from":0,"size":20}

但该查询正在所有字段中搜索。如果我只想在Father NameFather NameMother Name中找到结果,那么我什么都找不到。

{"query":{"match":{"Father Name":"value"}},"from":0,"size":20}

我的目标是找到像_all一样的搜索,但仅限于几个字段。

2 个答案:

答案 0 :(得分:2)

您的字段Father NameMother Name内部对象数组

例如,要在value内的Father Name字段内进行搜索,请执行

curl -XGET localhost:9200/myindex/_search?pretty -d '
{
  "query": {
    "match": {
      "Father Name.value": "first"
    }
  },
  "from": 0,
  "size": 20
}'

但是,我不确定如何查询Father Name中的所有字段。

参考Arrays of Inner Objects

答案 1 :(得分:0)

如果您需要在每个查询的基础上配置要使用的属性,那么Sam Shen的答案是可行的方法。

另一种方法是将字段配置为不包含在_all查询中。

例如,通过禁用类型级别的所有字段,然后启用Father Name上的所有子字段,这只会导致_all查询中包含Father Name

PUT index
{
  "mappings": {
    "type": {
      "include_in_all": false,
      "properties": {
         "Father Name" : {
           "include_in_all": true
         }
      }
    }
}

您可以在映射中的任何级别设置include_in_all属性,包括子字段属性。

这里的一大缺点是,这不是逐个查询配置的,而是为尝试使用_all字段的所有查询配置了这个。