1.分词器的介绍和使用
- 什么是分词器
- 将用户输入的一段文本,按照一定逻辑,拆分为多个词语的一种工具
- 常见的内置分词器
- standard analyzer:标准分析器器是默认分词器器,如果未指定,则使⽤用该分词器器。
请求:
POST localhost:9200/_analyze
{
"analyzer": "standard",
"text": "The best 3-points shooter is Curry!"
}
- simple analyzer:simple 分析器器当它遇到只要不不是字⺟母的字符,就将⽂文本解析成term,⽽而且所有的term都是
⼩小写的。
请求:
POST localhost:9200/_analyze
{
"analyzer": "simple",
"text": "The best 3-points shooter is Curry!"
}
- whitespace analyzer:whitespace 分析器器,当它遇到空⽩白字符时,就将⽂文本解析成terms
- stop analyzer:stop 分析器器 和 simple 分析器器很像,唯⼀一不不同的是,stop 分析器器增加了了对删除停⽌止词的⽀支 持,默认使⽤用了了english停⽌止词,stopwords 预定义的停⽌止词列列表,⽐比如 (the,a,an,this,of,at)等等
- language analyzer:(特定的语⾔言的分词器器,⽐比如说,english,英语分词器器),内置语⾔言:arabic, armenian, basque, bengali, brazilian, bulgarian, catalan, cjk, czech, danish, dutch, english, finnish, french, galician, german, greek, hindi, hungarian, indonesian, irish, italian, latvian, lithuanian, norwegian, persian, portuguese, romanian, russian, sorani, spanish, swedish, turkish, thai
- pattern analyzer:⽤用正则表达式来将⽂文本分割成terms,默认的正则表达式是\W+(⾮非单词字符)
- 选择分词器器
2.常见中文分词器的使用
- 常见分词器
- smartCN ⼀一个简单的中⽂文或中英⽂文混合⽂文本的分词器器
- IK分词器器 更更智能更更友好的中⽂文分词器器
- smartCN
-
安装:sh elasticsearch-plugin install analysis-smartcn
-
检验:
-
安装后重启
-
请求: POST localhost:9200/_analyze { "analyzer": "smartcn", "text": "⽕火箭明年年总冠军" }
-
-
3.常见的字段类型
- 核心数据类型
- 字符串:
- text:⽤用于全⽂文索引,该类型的字段将通过分词器器进⾏行行分词
- keyword:不不分词,只能搜索该字段的完整的值
- 数值型:
- long, integer, short, byte, double, float, half_float, scaled_float
- 布尔:
- boolean
- 二进制
- binary:该类型的字段把值当做经过 base64 编码的字符串串,默认不不存储,且不不可搜索
- 范围类型:
- 范围类型表示值是⼀一个范围,⽽而不不是⼀一个具体的值
- integer_range, float_range, long_range, double_range, date_range
- 譬如 age 的类型是 integer_range,那么值可以是 {"gte" : 20, "lte" : 40};搜索 "term" : {"age": 21} 可以搜索该值
-
日期:
date:- 格式:"2022-01-01" "2022/01/01 12:10:30" 这种字符串串格式
- format默认为:strict_date_optional_time||epoch_millis
- 由于Json没有date类型,所以es通过识别字符串串是否符合format定义的格式来判断是否
- 为date类型
- 格式:"2022-01-01" "2022/01/01 12:10:30" 这种字符串串格式
- 复杂数据类型
- 数组数据类型Array
- 同⼀一个数组只能存同类型的数据,不不能混存,譬如 [ 10, "some string" ] 是错误的
- Object对象数组 [ { "name": "Louis", "age": 18 }, { "name": "Daniel", "age": 17 }]
- 整数数组 [ 1, 2 ]
- 字符串串数组 [ "one", "two" ]
- ES中没有专⻔门的数组类型, 直接使⽤用[]定义即可,数组中所有的值必须是同⼀一种数据类 型, 不不⽀支持混合数据类型的数组:
- 对象类型Object
- 对象类型可能有内部对象
- 专用数据类型
- IP类型
- IP类型的字段⽤用于存储IPv4或IPv6的地址, 本质上是⼀一个⻓长整型字段.
- 字符串: