Elasticsearch 学习
ik 分词器
先下载 ik 分词器 放到Elasticsearch 的 plugins 的ik z中
- ik_max_word 最细粒度
- ik_smart 最小拆分
ik 分词器配置
IKAnalyzer.cfg.xml 配置分词规则
-
自定义自己分词规则
-
新建 xx.dic 文件
-
配置到IKAnalyzer.cfg.xml
<entry key="ext_dict">xx.dic</entry>
-
把自己的分词规则放到 xx.dic 文件中
-
索引基本操作
mothod | url 地址 | 描述 |
---|---|---|
PUT | localhost:9200/索引名称/类型名称/文档id | 创建文档(指定文档id) |
POST | localhost:9200/索引名称/类型名称 | 创建文档(随机文档id) |
POST | localhost:9200/索引名称/类型名称/文档id/_update | 修改文档 |
DELETE | localhost:9200/索引名称/类型名称/文档id | 删除文档 |
GET | localhost:9200/索引名称/类型名称/文档id | 查询文档通过文档id |
POST | localhost:9200/索引名称/类型名称/_search | 查询所有数据 |
创建索引
put /索引名称/类型名/文档id {请求数据}
Elasticsearch 字符类型
- 字符串类型 text keyword
- 数值类型 long integer short byte double float half float scaled
- 日期类型 date
- 布尔值类型 boolen
- 二进制类型 binary
- 等等...
指定类型
先新建索引
put /索引名称/类型名/文档id {
"mapping":{
"properties":{
"字段名称":{
"type":"类型"
}
}
}
}
获取数据信息 Get
get 表/文旦 等
默认指定类型 _doc
_cat 它帮助开发者快速查询Elasticsearch的相关信息。
修改数据put/update (曾经) post(现在)
删除 delete
例子 :PUT /test/vus/1
{
"name":"什么说的好的",
"age":"20"
}
文档的基本操作
基本操作
查询
GET /索引名称/类型名称/文档id(有没有都可以)/_search?q=条件(如name:java)
结果里面有个score 匹配度 就是匹配度越高分值越高
复杂操作
查询 (排序 高亮 )
GET /索引名称/类型名称/文档id(有没有都可以)/_search
{
"query":{
"match":{
条件(例如 "name":"java")
}
},
"_source":[要查询的字段(意思是筛选字段)],
"sort":{
字段(根据那个字段排序):{
"order":"desc/aesc"
}
},
--分页
"from":0, //从那条数据开始
"size":20 //一页有几条数据
}
根据score 那个更匹配
布尔值查询
GET /索引名称/类型名称/文档id(有没有都可以)/_search
{
"query":{
"bool":{
"must"( 中有filter/must/must not /should):[
{
"match":
{
条件("name":"java")
},
"match":
{
条件("age":"20")
},
........
}
],
"filter"( 中有filter/must/must not /should):[
{
"range":
{
条件("age"):{
"gle":"", //大于等于多少gl是大于
"lte":"" //小于等于多少lt是小于
}
}
}
]
}
}
}
must 和sql 中 where 中and相同
should 和where中or相同
mast not 是不等于
匹配多个条件
GET /索引名称/类型名称/文档id(有没有都可以)/_search
{
"query":{
"match":{
条件加空格(例如 "name":"java php" 这是只要满足一个条件就可以查出来)
}
}
}
精确查询
-
term 查询是直接通过倒排索引指定的词条进程精确的查找(直接查找精确的值 查询多个值的时候需要重新写个term 不能直接加空格)
-
match 会使用分词器解析(通过分析文档 然后在通过分析文档进行查询)
两个类型 text和keyword text可以用分词器解析keyword 不会用分词器解析
高亮查询
GET /索引名称/类型名称/文档id(有没有都可以)/_search
{
"query":{
"match":{
条件(例如 "name":"java")
}
},
"highlight":{ //高亮
"pre_tags":自定义标签前缀,(如"<B class="hah">")
"post_tags":自定义的后缀,(如 "</B>")
"fields":{
字段:{} //高亮的字段
}
}
}
搜索的结果自动加上一个html标签 或者自定义的标签