ElasticSearch——分词

前言:

最近在使用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个词了:

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

两者比较:

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": 256
      }
  }
}

原文地址:https://www.cnblogs.com/caoweixiong/p/11791238.html

时间: 2024-08-03 18:56:39

ElasticSearch——分词的相关文章

elasticsearch分词插件的安装

IK简介 IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包.从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本.最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件.从3.0版本开 始,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现.在2012版本中,IK实现了简单的分词 歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化. 二.安装I

Elasticsearch 分词器

无论是内置的分析器(analyzer),还是自定义的分析器(analyzer),都由三种构件块组成的:character filters , tokenizers , token filters. 内置的analyzer将这些构建块预先打包到适合不同语言和文本类型的analyzer中. Character filters (字符过滤器) 字符过滤器以字符流的形式接收原始文本,并可以通过添加.删除或更改字符来转换该流. 举例来说,一个字符过滤器可以用来把阿拉伯数字(?‎????????‎?)‎转成

(06)ElasticSearch 分词器介绍及安装中文分词器

分词器是用来实现分词的,从一串文本当中切分出一个一个的单词(词条),并对每个词条进行标准化处理(大小写.单复数.同义词等转换).分词器包括3部分: 1.character filter:分词之前的预处理,过滤掉html标签,特殊符号转换等. 2.tokenizer:分词, 3.token filter:标准化 ElasticSearch内置分词器: 1.standard分词器:(默认分词器)它会将词汇单元转换成小写形式,并除去停用词(a.an.the等)和标点符号,支持中文采用的方法为单字切分.

使用Docker 安装Elasticsearch、Elasticsearch-head、IK分词器 和使用

原文:使用Docker 安装Elasticsearch.Elasticsearch-head.IK分词器 和使用 Elasticsearch的安装 一.elasticsearch的安装 1.镜像拉取 docker pull elasticsearch:tag 2.启动 docker run -it -e "discovery.type=single-node" --name="es" -p 9200:9200 -p 9300:9300 elasticsearch 3

(转)ElasticSearch学习

ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进行数据索引.  官方站点:http://www.elasticsearch.com/ 中文站点:http://es-cn.medcl.net/    1.安装  必须先安装Java环境,并设置 JAVA_HOME => C:\Program Files\Java\jdk1.6.0_18  elasticsea

「扫盲」 Elasticsearch

什么是Elasticsearch? Elasticsearch is a real-time, distributed storage, search, and analytics engine Elasticsearch 是一个实时的分布式存储.搜索.分析的引擎. 介绍那儿有几个关键字: 实时.分布式.搜索.分析 于是我们就得知道Elasticsearch是怎么做到实时的,Elasticsearch的架构是怎么样的(分布式).存储.搜索和分析(得知道Elasticsearch是怎么存储.搜索和

Elasticsearch-1.7.0安装部署

1.首先去elasticsearch官网下载软件包版本1.7.0版本. #wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.0.tar.gz 2.解压elasticsearch-1.7.0.tar.gz 软件包. #tar zxf elasticsearch-1.7.0.tar.gz 3.es配置文件参数解释(真正配置不全用的到): #集群名称标识了你的集群,自动探查会用到它. #如果你在

ElasticSearch5.4.1 搜索引擎搭建文档

安装配置JDK环境JDK安装(不能安装JRE)JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载包:jdk-8u131-linux-x64.rpmyum localinstall jdk-8u131-linux-x64.rpm mvn 安装MVN下载地址wget http://www-eu.apache.org/dist/maven/maven-3/3.3.9/

Elasticsearch安装中文分词插件ik

Elasticsearch默认提供的分词器,会把每个汉字分开,而不是我们想要的根据关键词来分词.例如: curl -XPOST "http://localhost:9200/userinfo/_analyze?analyzer=standard&pretty=true&text=我是中国人" 我们会得到这样的结果: { tokens: [ { token: text start_offset: 2 end_offset: 6 type: <ALPHANUM>