首页 技术 正文
技术 2022年11月16日
0 收藏 966 点赞 4,378 浏览 909 个字

前言:

最近在使用elasticSearch中发现有些数据查不出来,于是研究了一下,发现是分词导致的,现梳理并总结一下。

ElasticSearch 5.0以后,string类型有重大变更,移除了string类型,string字段被拆分成两种新的数据类型: text用于全文搜索的,而keyword用于关键词搜索。

ElasticSearch字符串将默认被同时映射成text和keyword类型,将会自动创建下面的动态映射(dynamic mappings):

"relateId": {  
  "type": "text",
  "fields": {
    "keyword": {
      "type": "keyword",
      "ignore_above": 256
    }
   }
}

这就是造成部分字段还会自动生成一个与之对应的“.keyword”字段的原因。

存储查询示例:

relateId存储:20191101R672499460503          1个值

relateId.keyword存储:20191101 R 672499460503    3个值

这时用relateId进行精确查询,查不出数据,因为已经被分成3个词了:

ElasticSearch——分词

用relateId.keyword进行精确查询则可以查出数据来:

ElasticSearch——分词

两者比较:

Text:默认会分词,然后进行索引,支持模糊、精确查询,不支持聚合

keyword:不进行分词,直接索引,支持模糊、精确查询,支持聚合

进阶处理:

注意:Text默认会分词,这是很智能的,但在有些字段里面是没用的,所以对于有些字段使用text则浪费了空间。这时可以设置mapping为not analyzied,让它不分词。

"relateId": {
  "type": "text",
"index": "not_analyzed"
}

如果要指定分词则用下面的方式:

"relateId": {
  "type": "text",
"analyzer": "ik_max_word",
"search_analyzer":"ik_smart",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above":
}
  }
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,085
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,560
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,409
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,182
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,819
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,902