我想做的是查询弹性搜索(版本6.4),以获得唯一的搜索结果(名为eids)。我做了如下查询。我想做的是首先从两个字段分别名为eLabel和pLabel的文本搜索,并获得不同的结果称为eid。但是实际上结果并没有汇总,显示的id从0到超过20。该如何调整查询?
{
"query": {
"multi_match": {
"query": "Brazil Capital",
"fields": [
"eLabel",
"pLabel"
]
}
},
"size": 200,
"_source": [
"eid",
"eLabel"
],
"aggs": {
"eids": {
"terms": {
"field": "eid"
}
}
}
}
我当前的映射如下。
"mappings": {
"entity": {
"properties": {
"eLabel": {
"type": "text" ,
"index_options": "docs" ,
"analyzer": "my_analyzer"
} ,
"eid": {
"type": "keyword"
} ,
"subclass": {
"type": "boolean"
} ,
"pLabel": {
"type": "text" ,
"index_options": "docs" ,
"analyzer": "my_analyzer"
} ,
"prop_id": {
"type": "keyword"
} ,
"pType": {
"type": "keyword"
} ,
"way": {
"type": "keyword"
} ,
"chain": {
"type": "integer"
} ,
"siteKey": {
"type": "keyword"
},
"version": {
"type": "integer"
},
"docId": {
"type": "integer"
}
}
}
}
答案 0 :(得分:0)
根据您的评论,您可以使用Bool使用以下查询。不要认为聚合查询有什么问题,只需将您的查询替换为我提到的bool查询,我认为就足够了。
使用multi_match查询时,即使文档包含eLabel = "Rio is capital of brazil"
和pLabel = "something else entirely here"
POST <your_index_name>/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"eLabel": "capital"
}
},
{
"match": {
"pLabel": "brazil"
}
}
]
}
},
"size": 200,
"_source": [
"eid",
"eLabel"
],
"aggs": {
"eids": {
"terms": {
"field": "eid"
}
}
}
}
请注意,如果只需要eid
的值,而不想要文档,则可以在上述查询中设置"size":0
。这样,您将只返回聚合结果。
让我知道这是否有帮助!