IK分词器插件
什么是IK分词器?
分词: 即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把 数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词是将每个字看成一个 词,比如 “我爱大数据狂人”
会被分为
"
我
","
爱
","
大数据
","
狂
"
,“”人”这显然是不符合要求的,所以我们需要安装中文分词 器ik
来解决这个问题。
IK
提供了两个分词算法:
ik_smart
和
ik_max_word
,其中
ik_smart
为最少切分,
ik_max_word
为最细 粒度划分!一会我们测试!
在
kibana
中测试
ik
分词器,并就相关分词结果和
icu
分词器进行对比。
ik_max_word
:
细粒度分词,会穷尽一个语句中所有分词可能,测试!
![](https://img-blog.csdnimg.cn/20200823122614157.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDUxOTEyNA==,size_16,color_FFFFFF,t_70)
ik_smart : 粗粒度分词,优先匹配最长词,只有1个词!
如果我们想让系统识别“李源志”是一个词,需要编辑自定义词库。
这时候就不会被ik解析器解析
这时候李远源就不会被解析
Rest风格说明
一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交 互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 基本Rest
命令说明:
![](https://img-blog.csdnimg.cn/20200823123723196.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDUxOTEyNA==,size_16,color_FFFFFF,t_70)
基础测试
1
、首先我们浏览器
http://localhost:5601/
进入
kibana
里的
Console
2
、首先让我们在
Console
中输入
:
// 命令解释
// PUT 创建命令 test1 索引 type1 类型 1 id
PUT /test1/type1/1
{
"name":"大数据狂人", // 属性
"age":16 // 属性
}
返回结果 (是以REST ful 风格返回的 ):
那么
name
这个字段用不用指定类型呢。毕竟我们关系型数据库 是需要指定类型的啊
!
字符串类型
text
、
keyword
数值类型
long, integer, short, byte, double, flfloat, half_flfloat, scaled_flfloat
日期类型
date
te
布尔值类型
boolean
二进制类型
binary
等等
指定字段类型
![](https://img-blog.csdnimg.cn/2020082312423641.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDUxOTEyNA==,size_16,color_FFFFFF,t_70)
查看一下索引字段
GET test2
删除一条索引呢(库)
DELETE /test1
在来具体实现一下增删改查命令
建数据PUT创建
PUT /kuanger/user/1
{ "name":"狂人说", "age":18, "desc":"一顿操作猛如虎,一看工资2500", "tags":["直男","技术宅","温暖"] }
PUT /kuanger/user/2
{ "name":"张三", "age":3, "desc":"法外狂徒", "tags":["渣男","旅游","交友"] }
PUT /kuanger/user/3
{ "name":"李四", "age":30, "desc":"mmp,不知道怎么形容", "tags":["靓女","旅游","唱歌"] }
这里我们可以使用PUT新增已有数据进行修改,也可使用POST
PUT进行修改有个缺点,我们没有进行修改的值将会变成null,所以这里我们选取post
更新数据 POST
我们使用 POST 命令,在 id 后面跟 _update ,要修改的内容放到 doc 文档(属性)中即可。
POST /kuanger/user/1/_update
{ "doc":{ "name":"狂人", "desc":"hello" } }
查询数据PUT
简单的查询
GET kuanger/user/1
条件查询
_search?q=
GET kuanger/user/_search?q=name:狂人
使用
match_all
的,根据字段查询。相当于sql的
select * from table_name
一样。
GET kuanger/user/_search
{ "query":{ "match_all": {} },"_source": ["name","desc"] }
使用sort进行排序
GET kuanger/user/_search
{ "query":{ "match_all": {} },"sort": [ { "age": { "order": "desc" } } ] }
分页查询
GET kuanger/user/_search
{ "query":{ "match_all": {} },"sort": [ { "age": { "order": "asc" } } ],"from": 0, # 从第n条开始 "size": 1 # 返回n条数据 }
我们通过在
bool
属性内使用 must 来作为查询条件!,和sql中的 and 差不多,里面的条件
需要都满足!
GET kuangshen/user/_search
{ "query": { "bool": { "must": [ { "match": { "name": "狂神说" } },{ "match": { "age": 3 } } ] } } }
must_not和sql中or差不多
Fitter
我要查询
name
为狂人 的,
age
大于
10
的数据
GET kuangshen/user/_search
{ "query":{ "bool": { "must": [ { "match": { "name": "狂" } } ],"filter": { "range": { "age": { "gt": 10 } } } } } }
这里就用到了
fifilter
条件过滤查询,过滤条件的范围用
range
表示,
gt
表示大于,大于多少呢
?
是
10
。
其余操作如下
:
gt
表示大于
gte
表示大于等于
lt
表示小于
lte
表示小于等于
今天ElasticSearch的基本操作就讲到这里