我正在使用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 Name
或Father Name
和Mother Name
中找到结果,那么我什么都找不到。
{"query":{"match":{"Father Name":"value"}},"from":0,"size":20}
我的目标是找到像_all一样的搜索,但仅限于几个字段。
答案 0 :(得分:2)
您的字段Father Name
和Mother Name
是内部对象数组。
例如,要在value
内的Father Name
字段内进行搜索,请执行
curl -XGET localhost:9200/myindex/_search?pretty -d '
{
"query": {
"match": {
"Father Name.value": "first"
}
},
"from": 0,
"size": 20
}'
但是,我不确定如何查询Father Name
中的所有字段。
答案 1 :(得分: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
字段的所有查询配置了这个。