需求:给定一个list,多个词语,快速返回每个词语所在doc的detail字段的个数,如果是查一个词语,可以通过模糊匹配的方式进行查询

GET index/_search?size=0
{
"query":{
"bool":{
"should":[
{
"wildcard":{
"detail":"*齐齐哈尔医学院附属第三医院*"
}
}
]
}
},
"aggs" : {
}
}

可惜list里有几十个词语,并且wildcard模糊匹配的销量很低,这个时候我们就可以使用分词的方式进行精准查询
先进行添加分词器mapping

_mapping
{
"properties" : {
"detail" :
{
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
}
}
}
  1. text类型:会分词,先把对象进行分词处理,然后再再存入到es中。
    当使用多个单词进行查询的时候,当然查不到已经分词过的内容!
  2. keyword:不分词,没有把es中的对象进行分词处理,而是存入了整个对象!
    这时候当然可以进行完整地查询!默认是256个字符!
  3. ik_max_word和ik_smart,两个不同的分词规则,一个细粒度一个粗粒度,可以自己尝试
GET _analyze
{
"analyzer": "ik_smart",
"text": "两个不同的分词规则,一个细粒度一个粗粒度,可以自己尝试"
}

最后查询

GET index/_search?size=0
{
"aggs":{
"messages":{
"filters":{
"filters":{
"鼻咽癌肝转移":{
"term":{
"detail":"鼻咽癌肝转移"
}
},
"龙山县人民医院":{
"term":{
"detail":"龙山县人民医院"
}
},
"支付宝":{
"term":{
"detail":"支付宝"
}
},
"错过就没":{
"term":{
"detail":"错过就没"
}
},
"截止时间":{
"term":{
"detail":"截止时间"
}
}
}
}
}
}
}