【发布时间】:2016-05-05 19:36:52
【问题描述】:
我有包含多个嵌套文档的文档。嵌套查询工作正常,但即使搜索查询仅匹配少数嵌套对象,它们仍会返回所有嵌套对象(即整个文档)。但是,它确实会过滤整个文档。
这是一个例子:
PUT /demo
{
"mappings": {
"company": {
"properties": {
"employees": {
"type": "nested"
}
}
}
}
}
PUT
/demo/company/1
{
"id": 1,
"name": "Google",
"emp_count": 3,
"employees": [{
"id": 1,
"name": "John",
"address": {
"city": "Mountain View",
"state": "California",
"country": "United States"
}
}]
}
PUT
/demo/company/2
{
"id": 1,
"name": "Facebook",
"emp_count": 3,
"employees": [{
"id": 1,
"name": "Amber",
"address": {
"city": "Bangalore",
"state": "Karnataka",
"country": "India"
}
}, {
"id": 1,
"name": "Adrian",
"address": {
"city": "Palo Alto",
"state": "California",
"country": "United States"
}
}]
}
PUT
/demo/company/3
{
"id": 1,
"name": "Microsoft",
"emp_count": 3,
"employees": [{
"id": 1,
"name": "Aman",
"address": {
"city": "New York",
"state": "New York",
"country": "United States"
}
}]
}
在地址中搜索India 时,理想情况下,我应该只使用一个嵌套对象获取Facebook,但我会获取所有嵌套对象。如何过滤返回的嵌套对象?
查询示例:
{
"query": {
"function_score":{
"query":{
"nested":{
"path":"employees",
"score_mode":"max",
"query": {
"multi_match":{
"query":"India",
"type":"cross_fields",
"fields":[
"employees.address.city",
"employees.address.country",
"employees.address.state"
]
}
}
}
}
}
}
}
此查询的输出是 Facebook 与所有员工,而我只想要 Amber。
【问题讨论】:
标签: elasticsearch nested