一、CRUD简单使用
(1) 创建索引:PUT /index?pretty
(2) 删除索引:DELETe /index?pretty
(3) 查询索引全部内容:GET /product/_search
查询单个id:GET /product/_doc/1
查询索引: GET _cat/indices?v 查看索引的状态
(4) 插入数据:
PUT /index/_doc/id
{
JSON数据
}
PUT /product/_doc/1
{
"name": "张三",
"age": 120,
"tags": ["aaa","bbb","ccc"]
}
(5)修改字段用POST 全量替换用PUT
POST /product/_doc/1/_update
{
"doc": {
"age": 1
}
}
或者
POST /product/_update/1
{
"doc": {
"age": 5
}
}
(6)删除数据
DELETE /index/_doc/1
二、进阶语法
1、mapping
PUT /product3
{
"mappings":{
"properties":{
"desc":{ #取消字段索引
"type": "text",
"index": false
}}
"_source":{ #一般不用,一般查询时候才用
"includes":[
"name",
"price"
],
"excludes":[
"desc",
"tags"
]
}
}
}
2、元数据:_source
禁用元数据方法: “_source”: false
GET product3/_search
{
"_source": {
"includes": [ //展示字段
"owner.*",
"name"
],
"excludes": [ //不展示字段
"desc"
]
},
"query": { //查询条件为空
"match_all": {}
}
}
3、Query_string
#查询所有
GET /product/_search
#带参数
GET /product/_search?q=name:xiaomi
#分页
GET /product/_search?from=0&size=2&sort=price:asc
#精准匹配
GET /product/_search?q=data:2021-06-01
#_all搜索 相当于在所有索引字段中建索
GET /product/_search?q=2021-06-01
三、DSL请求
1、全文检索-Fulltext query:
match #查询某字段
match_all #查询全部数据
multi_match #多字段匹配
match_phrase #短语匹配 几个词都存在,且顺序不能颠倒
term #精准匹配
terms #in查找
range 范围查找 get大于等于 gt大于 lte小于等于 lt小于
bool布尔查询
match
GET /product2/_search
{
"query": { #查询某字段
"match": {
"name": "xiaomi nfc"
}
}
}
match_all #查询全部数据
{
"query": {
"match_all": {}
}
}
multi_match #多字段匹配
{
"query": {
"multi_match": {
"query": "xiaohu",
"fields": ["name","desc"]
}
}
}
match_phrase #分词后短语匹配 几个词都存在,且顺序不能颠倒,且连续
{
"query":{
"match_phrase": {
"name": "nfc xiaomi"
}
}
}
term #精准匹配,不分词匹配分词,多单词匹配不到(因为不分词)
{
"query": {
"term": {
"name": "phone"
}
}
}
keyword #全量单词,只保留256字符 。term+keyword 全量匹配256字符
{
"query": {
"term": {
"name.keyword": "xiaomi phone"
}
}
}
terms in查找
{
"query": {
"terms": {
"tags": ["AA"]
}
}
}
range 范围查找 get大于等于 gt大于 lte小于等于 lt小于
{
"query": {
"range": {
"price": {
"gte": 10,
"lt": 20
}
}
}
}
日期:now-1d/d 减一天 now/d 今天
时间:2021-06-10T08:00
2、过滤器:filter
简单实用,固定得分。效率大于 Fulltext query
{
"query": {
"constant_score": {
"filter": {
"term": {
"name": "xiaomi"
}
},
"boost": 1.2
}
}
}
布尔查询:must 必须全部满足;filter 过滤即可;must_not必须排除;should 可以满足0个1个或多个
"minimum_should_match": 1 should,如果不二插叙 包含至少一个should子句,而没有must或filter子句,则默认值为1.否则默认值为0
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "xiaomi phone"
}
},
{
"match_phrase": {
"desc": "huhu shengwei"
}
}
]
}
}
}
3、分词器
char_filter 字符过滤器
filter 过滤停用词,大小写,时态转换
tokenizer 令牌过滤器,负责切词
analyzer 自定义分词器
4、中文分词器:ik分词
ik下载地址:GitHub地址
ik文件夹解压到 /usr/es/es7.9/plugins/ik文件中去
ik文件描述:
IKAnalyzer.cfg.xml:IK分词配置文件
主词库:main.idc
英文停用词:stopword.dic 不会建立在倒排索引中
特殊词库:quantifier.dic 特殊词库,计量单位等
suffix.dic 特殊词库,行政单位
surname.dic 特殊词库,百家姓
preposition:特殊词库:语气词
ik_smart ,ik_max_word
GET _analyze
{
"analyzer": "ik_max_word",
"text": ["我爱中国人民共和国"]
}
自定义添加ik分词:修改IKAnalyzer.cfg.xml配置文件,增加自定义文件即可实现
热更新:基于远程词库、基于数据库 两种方式
四、小技巧
1、查看分词结果-分词器
GET _analyze # 可以查看到分词结果
{
"analyzer": "standard",
"text": "xiaomi nfc phone"
}
2、查看字段属性
GET product2/_mapping
五、ES学习步骤:
1、环境部署(单节点)ES部署+Kibana部署+IK分词器(单节点)_无敌小田田的博客-CSDN博客es部署+Kibana部署+IK分词器https://blog.csdn.net/qq_36602951/article/details/1217539542、基本命令整理
ES DSL命令CRUD整理_无敌小田田的博客-CSDN博客一、CRUD简单使用(1) 创建索引:PUT /index?pretty(2) 删除索引:DELETE /index?pretty(3) 查询索引全部内容:GET /product/_search查询单个id:GET /product/_doc/1查询索引: GET _cat/indices?v 查看索引的状态(4) 插入数据:PUT /index/_doc/id{JSON数据}PUT /product/_doc/1{"name": "张三","aghttps://blog.csdn.net/qq_36602951/article/details/121888259
3、ES+JAVA示例代码
CSDNhttps://mp.csdn.net/mp_blog/creation/editor/121888538
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)