elasticsearch text字段聚合以及精确查询的解决方案
简单来讲,从Elasticsearch设计的初衷来讲, match查询用来做搜索引擎类似的评分查询,精确匹配查询用term来做,参见各种Elasticsearch的手册,不展开。中文的精确查询由于存在index保存阶段的分词和search阶段的分词,所以直接沿用这些方法并不适用。
所以需要用到关键字
curl -i -H "Content-Type:application/json" -XPUT "localhost:9200/your_index/_mapping/your_doc/?pretty" -d '
{"doc":{
"properties":{
“your_text”:{
"type":"text",
"fielddata":true,
"fields":{
"keyword":{
"type":"keyword"
}
}
}
}
}}'
聚合时
“aggs”:{
"agg_name":{
"terms":{
"field":"your_text.keyword"
}
}
}
精确匹配时
{
"query": {
"term": {
"your_text.keyword": {
"value": "ABC"
}
}
}
}