ElasticSearch中text和keyword类型的区别

es从2.X版本一下子跳到了5.X版本,将string类型变为了过期类型,取而代之的是text和keyword数据类型,一直到现在最新的6以上版本。接下来就看看这两个字段的区别。
    
     按照官方文档的阐述,text类型的数据被用来索引长文本,例如电子邮件主体部分或者一款产品的介绍,这些文本会被分析,在建立索引文档之前会被分词器进行分词,转化为词组。经过分词机制之后es允许检索到该文本切分而成的词语,但是text类型的数据不能用来过滤、排序和聚合等操作。
    keyword类型的数据可以满足电子邮箱地址、主机名、状态码、邮政编码和标签等数据的要求,不进行分词,常常被用来过滤、排序和聚合。

 

    综上,可以发现text类型在存储数据的时候会默认进行分词,并生成索引。而keyword存储数据的时候,不会分词建立索引,显然,这样划分数据更加节省内存。
 

    这样,我们映射了某一个字段为keyword类型之后,就不用设置任何有关分词器的事情了,该类型就是默认不分词的文本数据类型。而对于text类型,我们还可以设置它的分词类型,如下:

PUT /zk_test/info/_mapping
{
  "info":{
    "properties":{
      "address":{"type":"text","analyzer":"standard"}
    }
  }
}

analyzer 还有中文分词 chinese,英文分词 english 等参数。

 

    另外,我们在像之前2.X版本中一样设置分词使用"index":"not_analyzed"配置时,会有提醒,提示"index"参数只有false和true两个值。

 

 

 

在5以上的版本中,“index”参数用来配置该字段是否可以被用来搜索,true可以通过搜索该字段检索到文档,false为否,配置分词器,用analyzer参数。

posted on 2020-11-21 11:44  Code2020  阅读(6219)  评论(0编辑  收藏  举报