当前位置:   article > 正文

ES(ElasticSearch)基础操作_icu ik 分词器

icu ik 分词器

IK分词器插件

什么是IK分词器?

分词: 即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把 数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词是将每个字看成一个 词,比如 “我爱大数据狂人” 会被分为 " "," "," 大数据 "," " ,“”人”这显然是不符合要求的,所以我们需要安装中文分词 器ik 来解决这个问题。
IK 提供了两个分词算法: ik_smart ik_max_word ,其中 ik_smart 为最少切分, ik_max_word 为最细 粒度划分!一会我们测试!
kibana 中测试 ik 分词器,并就相关分词结果和 icu 分词器进行对比。
ik_max_word : 细粒度分词,会穷尽一个语句中所有分词可能,测试!

ik_smart : 粗粒度分词,优先匹配最长词,只有1个词!

如果我们想让系统识别“李源志是一个词,需要编辑自定义词库。

 

这时候就不会被ik解析器解析

这时候李远源就不会被解析

Rest风格说明

一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交 互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 基本Rest 命令说明:
 
 
基础测试
1 、首先我们浏览器 http://localhost:5601/ 进入 kibana 里的 Console
2 、首先让我们在 Console 中输入 :
  1. // 命令解释
  2. // PUT 创建命令 test1 索引 type1 类型 1 id
  3. PUT /test1/type1/1
  4. {
  5. "name":"大数据狂人", // 属性
  6. "age":16 // 属性
  7. }

返回结果 (是以REST ful 风格返回的 ):

那么 name 这个字段用不用指定类型呢。毕竟我们关系型数据库 是需要指定类型的啊 !
字符串类型
text keyword
数值类型
long, integer, short, byte, double, flfloat, half_flfloat, scaled_flfloat
日期类型
date
te 布尔值类型
boolean
二进制类型
binary
等等
 
指定字段类型
 
查看一下索引字段
GET test2

删除一条索引呢(库)

DELETE /test1

 

在来具体实现一下增删改查命令

建数据PUT创建

  1. PUT /kuanger/user/1
  2. { "name":"狂人说", "age":18, "desc":"一顿操作猛如虎,一看工资2500", "tags":["直男","技术宅","温暖"] }
  3. PUT /kuanger/user/2
  4. { "name":"张三", "age":3, "desc":"法外狂徒", "tags":["渣男","旅游","交友"] }
  5. PUT /kuanger/user/3
  6. { "name":"李四", "age":30, "desc":"mmp,不知道怎么形容", "tags":["靓女","旅游","唱歌"] }

这里我们可以使用PUT新增已有数据进行修改,也可使用POST

PUT进行修改有个缺点,我们没有进行修改的值将会变成null,所以这里我们选取post

更新数据 POST

我们使用 POST 命令,在 id 后面跟 _update ,要修改的内容放到 doc 文档(属性)中即可。

  1. POST /kuanger/user/1/_update
  2. { "doc":{ "name":"狂人", "desc":"hello" } }

查询数据PUT

简单的查询

GET kuanger/user/1
条件查询 _search?q=
GET kuanger/user/_search?q=name:狂人

 

使用 match_all ,根据字段查询。相当于sql的 select * from table_name 一样。
  1. GET kuanger/user/_search
  2. { "query":{ "match_all": {} },"_source": ["name","desc"] }

 

使用sort进行排序

  1. GET kuanger/user/_search
  2. { "query":{ "match_all": {} },"sort": [ { "age": { "order": "desc" } } ] }
分页查询
 
  1. GET kuanger/user/_search
  2. { "query":{ "match_all": {} },"sort": [ { "age": { "order": "asc" } } ],"from": 0, # 从第n条开始 "size": 1 # 返回n条数据 }
我们通过在 bool 属性内使用 must 来作为查询条件!,和sql中的 and 差不多,里面的条件
需要都满足!
  1. GET kuangshen/user/_search
  2. { "query": { "bool": { "must": [ { "match": { "name": "狂神说" } },{ "match": { "age": 3 } } ] } } }
must_not和sql中or差不多
 
Fitter
我要查询 name 为狂人 的, age 大于 10 的数据
  1. GET kuangshen/user/_search
  2. { "query":{ "bool": { "must": [ { "match": { "name": "狂" } } ],"filter": { "range": { "age": { "gt": 10 } } } } } }
这里就用到了 fifilter 条件过滤查询,过滤条件的范围用 range 表示, gt 表示大于,大于多少呢 ? 10
其余操作如下 :
gt 表示大于
gte 表示大于等于
lt 表示小于
lte 表示小于等于
 
 
今天ElasticSearch的基本操作就讲到这里
 
 
 

 

 

 

 

 

 
 
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/858954
推荐阅读
相关标签
  

闽ICP备14008679号