2017-03-31 70 views
1

我正在使用elasticsearch 5.2.2。elasticsearch中的数组中没有匹配

在我的索引

我一直在寻找这样的数据:

{ 
    "_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

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

Father Namevalue领域内进行搜索,例如,做

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

我不知道,但是,如何查询内Father Name各个领域。

参考Arrays of Inner Objects

0

山姆沉的回答是去,如果你需要配置在每次查询时使用的属性的方式。

一种替代方法是将字段配置为不包含在_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字段的所有查询配置的。

相关问题