elasticsearch中的数组中没有匹配
问题描述:
我正在使用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 Name
或Father Name
和Mother Name
中查找结果,那么我什么也找不到。
{"query":{"match":{"Father Name":"value"}},"from":0,"size":20}
我的目标是找到像_all一样的搜索,但仅限于几个字段。
答
您的字段Father Name
和Mother Name
是内部对象数组。
内Father Name
的value
领域内进行搜索,例如,做
curl -XGET localhost:9200/myindex/_search?pretty -d '
{
"query": {
"match": {
"Father Name.value": "first"
}
},
"from": 0,
"size": 20
}'
我不知道,但是,如何查询内Father Name
各个领域。
答
山姆沉的回答是去,如果你需要配置在每次查询时使用的属性的方式。
一种替代方法是将字段配置为不包含在_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
字段的所有查询配置的。