Elasticsearch这种全文搜索引擎,会用某种算法对建立的文档进行分析,从文档中提取出有效信息(Token)

对于es来说,有内置的分析器(Analyzer)和分词器(Tokenizer)

1:分析器

ES内置分析器

standard 分析器划分文本是通过词语来界定的,由Unicode文本分割算法定义。它删除大多数标点符号,将词语转换为小写(就是按照空格进行分词)
simple 分析器每当遇到不是字母的字符时,将文本分割为词语。它将所有词语转换为小写。
keyword 可以接受任何给定的文本,并输出与单个词语相同的文本
pattern 分析器使用正则表达式将文本拆分为词语,它支持小写和停止字
language 语言分析器
whitespace (空白)分析器每当遇到任何空白字符时,都将文本划分为词语。它不会将词语转换为小写
custom 自定义分析器

测试simple Analyzer:

POST _analyze
{
 "analyzer": "simple",
 "text": "today is 2018year 5month 1day."
}

custom(自定义)分析器接受以下的参数:

tokenizer 内置或定制的标记器(也就是需要使用哪种分析器)。<br/>(需要)
char_filter 内置或自定义字符过滤器的可选阵列。
filter 可选的内置或定制token过滤器阵列。
position_increment_gap 在索引文本值数组时,Elasticsearch会在一个词的最后一个位置和下一个词的第一个位置之间插入“间隙”,以确保短语查询与不同数组元素的两个术语不匹配。 默认为100.有关更多信息

测试:

PUT /my_index/groups/1
{
   "names": [ "John Abraham", "Lincoln Smith"]
}

做一下普通查询:

GET /my_index/groups/_search
{
   "query": {
       "match_phrase": {
           "names": "Abraham Lincoln"
      }
  }
}

然后删除索引,重新添加:

PUT my_index
{
 "mappings": {
   "my_type": {
     "properties": {
       "names": {
         "type": "text",
         "position_increment_gap": 0
      }
    }
  }
}
}

然后倒入数据:

PUT /my_index/groups/1
{
   "names": [ "John Abraham", "Lincoln Smith"]
}

在做查询操作:

GET /my_index/groups/_search
{
   "query": {
       "match_phrase": {
           "names": "Abraham Lincoln"
      }
  }
}

2:更新分析器

1:要先关闭索引

2:添加分析器

3:打开索引

1、 关闭索引

POST my_index/_close

2、 添加分析器

PUT my_index/_settings
{
 "analysis": {
     "analyzer": {
       "my_custom_analyzer3": {
         "type":      "custom",
         "tokenizer": "standard",
         "char_filter": [
           "html_strip"
        ],
         "filter": [
           "lowercase",
           "asciifolding"
        ]
      }
    }
  }
}

3、打开索引

POST my_index/_open

4、测试:

POST my_index/_analyze
{
 "analyzer": "my_custom_analyzer",
 "text": "Is this <b>网页 </b>?"
}

3:分词器

Es中也支持非常多的分词器

Standard 默认的分词器根据 Unicode 文本分割算法,以单词边界分割文本。它删除大多数标点符号。<br/>它是大多数语言的最佳选择
Letter 遇到非字母时分割文本
Lowercase 类似 letter ,遇到非字母时分割文本,同时会将所有分割后的词元转为小写
Whitespace 遇到空白字符时分割位文本

Standard例子:

POST _analyze
{
 "tokenizer": "standard",
 "text": "this is standard tokenizer!!!!."
}

Letter例子:

POST _analyze
{
 "tokenizer": "letter",
 "text": "today is 2018year-05month"
}

Whitespace例子:

POST _analyze
{
 "tokenizer": "whitespace",
 "text": "this is t es t."
}

4:更新分词器

我们在创建索引之后可以添加分词器,比如想要按照空格的方式进行分词

【注意】

添加分词器步骤:

1:要先关闭索引

2:添加分词器

3:打开索引

POST school/_close

PUT school/_settings
{
"analysis" :
{
  "analyzer" :
  {
    "content" : {"type" : "custom" , "tokenizer" : "whitespace"}
  }
}
}

POST school/_open

获取索引的配置:

索引中包含了非常多的配置参数,我们可以通过命令进行查询

GET school/_settings

es之分词器和分析器的更多相关文章

  1. Elasticsearch(ES)分词器的那些事儿

    1. 概述 分词器是Elasticsearch中很重要的一个组件,用来将一段文本分析成一个一个的词,Elasticsearch再根据这些词去做倒排索引. 今天我们就来聊聊分词器的相关知识. 2. 内置 ...

  2. es的分词器analyzer

    analyzer   分词器使用的两个情形:  1,Index time analysis.  创建或者更新文档时,会对文档进行分词2,Search time analysis.  查询时,对查询语句 ...

  3. ES中文分词器安装以及自定义配置

    之前我们创建索引,查询数据,都是使用的默认的分词器,分词效果不太理想,会把text的字段分成一个一个汉字,然后搜索的时候也会把搜索的句子进行分词,所以这里就需要更加智能的分词器IK分词器了. ik分词 ...

  4. ES ik分词器使用技巧

    match查询会将查询词分词,然后对分词的结果进行term查询. 然后默认是将每个分词term查询之后的结果求交集,所以只要分词的结果能够命中,某条数据就可以被查询出来,而分词是在新建索引时指定的,只 ...

  5. Elasticsearch(10) --- 内置分词器、中文分词器

    Elasticsearch(10) --- 内置分词器.中文分词器 这篇博客主要讲:分词器概念.ES内置分词器.ES中文分词器. 一.分词器概念 1.Analysis 和 Analyzer Analy ...

  6. ElasticSearch最全分词器比较及使用方法

    介绍:ElasticSearch 是一个基于 Lucene 的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口.Elasticsearch 是用 Java 开 ...

  7. Solr6.5配置中文分词器

    Solr作为搜索应用服务器,我们在使用过程中,不可避免的要使用中文搜索.以下介绍solr自带的中文分词器和第三方分词器IKAnalyzer.  注:下面操作在Linux下执行,所添加的配置在windo ...

  8. ElasticSearch中文分词器-IK分词器的使用

    IK分词器的使用 首先我们通过Postman发送GET请求查询分词效果 GET http://localhost:9200/_analyze { "text":"农业银行 ...

  9. Elasticsearch系列---倒排索引原理与分词器

    概要 本篇主要讲解倒排索引的基本原理以及ES常用的几种分词器介绍. 倒排索引的建立过程 倒排索引是搜索引擎中常见的索引方法,用来存储在全文搜索下某个单词在一个文档中存储位置的映射.通过倒排索引,我们输 ...

随机推荐

  1. linux文件属性软硬连接

    硬链接:ln 源文件 目标文件 软链接:ln -s 源文件 目标文件 硬链接总结: 1.具有相同inode节点号的多个文件互为硬链接文件 2.删除硬链接文件或者删除源文件任意之一,文件实体并未被删除. ...

  2. 【嵌入式 Linux文件系统】如何使用Initramfs文件系统

    (1)#cd ../rootfs/ #ln -s ./bin/busybox init 创建软链接 (2)进入Linux内核 #make menuconfig General setup-->I ...

  3. [转帖]Docker从入门到动手实践

    Docker从入门到动手实践 https://www.cnblogs.com/nsky/p/10853194.html dockerfile的图很好呢. 但是自己没有做实验 , 其实知识都挺好. do ...

  4. SparkStreaming DStream转换

    1.无状态转换操作 (1)无状态转化操作就是把简单的RDD转化操作应用到每个批次上,也就是转换DStream中的每一个RDD. 部分无状态转化操作: (2)尽管这些函数韩起来像作用在整个流上一样,但事 ...

  5. JAVA知识点总结(六)(集合)

    第十九章 集合 一.数组弊端: 数组长度是固定的,无法继续添加元素. 二.什么是集合: Java提供一个集合类,它的长度是可以改变的,能储存任意的对象,长度随着元素的增加而增加. 三.集合和数组的区别 ...

  6. IDEA导入Junit jar包,在JavaSE的Module中使用Junit测试

    写代码时偶尔想试一下自己的小想法,于是在IDEA中建了一个JavaEE项目.JavaEE项目中只能在main方法中运行代码块,不如单元测试的@Test灵活. 于是在网上找到了Junit的jar包:Do ...

  7. APP登录时Token认证过程

    1.App登录Token登录机制: 一般第一次安装App后,会让你进行注册后登录,而只要登录成功后,以后的每次启动App都是登录状态, 不需要每次启动时再登录.但有些App你若长期没有启动,它会提示你 ...

  8. [LeetCode] 164. 最大间距

    题目链接 : https://leetcode-cn.com/problems/maximum-gap/ 题目描述: 给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值. 如果数组元素个数 ...

  9. 剑指offer-动态规划-贪心算法--剪绳子-python

    题目描述 给你一根长度为n的绳子,请把绳子剪成m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]xk[1]x...xk[m]可能 ...

  10. MySQL索引的分类、结构、使用场景

    MySQL索引分类 1.主键索引:设定为主键后数据库会自动建立索引,innodb为聚簇索引 语法: 随表一起建索引: CREATE TABLE customer (id INT(10) UNSIGNE ...