使用 Elasticsearch 对某个字符串字段进行模糊查询的时候,可能因为该字段是text类型而搜索不到,因为text类型会将字符串进行分词之后存入索引,那么我们在模糊查询的时候其实是基于已分词的词组进行的模糊查询,这样会导致本来应该查询出来的数据有可能会查询不到。可以通过keyword来进行精确匹配。text会对字段进行分词处理而keyword则不会进行分词。也就是说如果字段是text类型,存入的数据会先进行分词,然后将分完词的词组存入索引,而keyword则不会进行分词,直接存储。
Elasticsearch 的 text 类型的数据被用来索引长文本,例如文章简介或者一款产品的介绍,这些文本会被分析,在建立索引文档之前会被分词器进行分词,转化为词组。经过分词机制之后允许检索到该文本切分而成的词语,但是text类型的数据不能用来过滤、排序和聚合等操作。
keyword类型的数据可以满足关键字、姓名、邮箱地址、主机名、状态码、手机号和标签等数据的要求,不进行分词,常常被用来过滤、排序和聚合等操作。
"mappings": { "_doc": { "properties": { "title2": { "analyzer": "ik_max_word", "type": "text" }, "title": { "analyzer": "ik_max_word", "type": "text", "fields": { "title3": { "type": "text" }, "title4": { "ignore_above": 256, "type": "keyword" } } } } } },
查询设置
{ "explain": false, "query": { "bool": { "should": [ { "match": { "title": "空" } }, { "match": { "title.title3": "空" } } ] } } }