嵌套查询
样本数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| PUT /testindex/testtype/1 { "group":"fans", "users":[ { "name":"name1", "age":20 }, { "name":"name2", "age":26 } ] } PUT /testindex/testtype/2 { "group":"fans", "users":[ { "name":"name2", "age":15 }, { "name":"name3", "age":30 } ] }
|
查询
对于上述数据,通过普通查询方式查询users的结果会与预期不同。
例如如下的查询语句,预期只返回第一条数据,实际上两条数据全部返回。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| GET /testindex/testtype/_search { "query": { "bool": { "must": [ { "match": { "users.name": "name2" } }, { "range": { "users.age": { "gte": 20 } } } ] } } }
|
修改mapping
使用嵌套查询,需要制定mapping为nested。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| PUT /testindex { "mappings": { "testtype": { "properties": { "group": { "type":"string" }, "user": { "type": "nested" } } } } }
|
嵌套查询
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| GET /testindex/testtype/_search { "query": { "nested": { "path": "users", "query": { "bool": { "must": [ { "match": { "users.name": "name2" } }, { "range": { "users.age": { "gte": 20 } } } ] } } } } }
|