ElasticSearch5.x以上版本使用text和keyword作为字符串类型取代之前版本的string类型。
字符串 - text:用于全文索引,该类型的字段将通过分词器进行分词,最终用于构建索引
字符串 - keyword:不分词,只能搜索该字段的完整的值,只用于 filtering
新版本字符串将默认被同时映射成text
和keyword
类型. 例如对下面的文档进行索引后:
{
"
nameZh":
"风2"
}
ElasticSearch将会为你创建下面的动态映射(dynamic mappings):
{
"
nameZh": {
"type"
:
"text"
,
"fields"
: {
"keyword"
: {
"type"
:
"keyword"
,
"ignore_above"
: 256
}
}
}
}
当然, 基于这个映射你即可以在foo
字段上进行全文搜索, 也可以通过foo.keyword
字段实现关键词搜索及数据聚合.
{
"query": {
"bool": {
"should": [{
"match_phrase": {
"country": "丝"
}
},
{
"term": {
"nameZh.keyword": "风2"
}
}
],
"minimum_should_match": 1
}
}
}
"country": "丝" 分词查询走text
"nameZh.keyword": "风2"不分词查询 走keyword