我的目的是在多个字段中搜索一个值,并返回这些值的计数和不同的值。
要做到这一点,我意识到我必须使用方面。
这是数据库架构:
index:
analysis:
analyzer:
custom_search_analyzer:
type: custom
tokenizer: standard
filter : [standard, snowball, lowercase, asciifolding]
custom_index_analyzer:
type: custom
tokenizer: standard
filter : [standard, snowball, lowercase, asciifolding, custom_filter]
filter:
custom_filter:
type: edgeNGram
side: front
min_gram: 1
max_gram: 20
{
"structure": {
"properties": {
"name": {"type": "string", "search_analyzer": "custom_search_analyzer", "index_analyzer": "custom_index_analyzer"},
"locality": {"type": "string", "search_analyzer": "custom_search_analyzer", "index_analyzer": "custom_index_analyzer"},
"province": {"type": "string", "search_analyzer": "custom_search_analyzer", "index_analyzer": "custom_index_analyzer"},
"region": {"type": "string", "search_analyzer": "custom_search_analyzer", "index_analyzer": "custom_index_analyzer"}
}
}
}
这是我尝试使用的查询:
{
"query": {
"bool": {
"should": [
{
"match": {
"locality": "bolo"
}
},
{
"match": {
"region": "bolo"
}
},
{
"match": {
"name": "bolo"
}
}
]
}
},
"facets": {
"region": {
"query": {
"term": {
"region": "bolo"
}
}
},
"locality": {
"query": {
"term": {
"locality": "bolo"
}
}
},
"name": {
"query": {
"term": {
"name": "bolo"
}
}
}
}
}
在我所做的所有测试中,这是最接近我想要的结果的查询,但是,并没有告诉我不同字段的计数,我发现它计算总字段。
例如,上面的查询返回以下结果:
facets: {
region: {
_type: query
count: 0
}
locality: {
_type: query
count: 2
}
name: {
_type: query
count: 0
}
}
我想得到这样的结果(不是那么明显写得对,但确实理解我的需要):
facets: {
....
locality: {
_type: query
"terms": [
{"term": "Bologna", "count": 1},
{"term": "Bolognano", "count": 1}
]
}
我该怎么办?
我已经尝试在facets中使用“terms”而不是“query”,并在研究领域中放入“index:not_analyzed”,但只有在我尝试确切的范围时才会返回,而不是它的一部分!< / p>
答案 0 :(得分:0)
这可以使用值计数聚合来完成。 在值计数聚合中,它为您提供了唯一术语的数量。 术语聚合为您提供唯一的术语及其文档数。
我相信您正在寻找价值计数汇总 - http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-valuecount-aggregation.html