前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ES的分词器

ES的分词器

作者头像
Java廖志伟
发布2022-03-07 13:41:14
5990
发布2022-03-07 13:41:14
举报
文章被收录于专栏:高级开发进阶

7、指定IK分词器作为默认分词器

ES的默认分词设置是standard,这个在中文分词时就比较尴尬了,会单字拆分,比如我搜索关键词“清华大学”,这时候会按“清”,“华”,“大”,“学”去分词,然后搜出来的都是些“清清的河水”,“中华儿女”,“地大物博”,“学而不思则罔”之类的莫名其妙的结果,这里我们就想把这个分词方式修改一下,于是呢,就想到了ik分词器,有两种ik_smart和ik_max_word。ik_smart会将“清华大学”整个分为一个词,而ik_max_word会将“清华大学”分为“清华大学”,“清华”和“大学”,按需选其中之一就可以了。修改默认分词方法(这里修改school_index索引的默认分词为:ik_max_word):

代码语言:javascript
复制
PUT /school_index
{
"settings" : {
"index" : {
"analysis.analyzer.default.type": "ik_max_word"
}
}
}

8.ES数据管理

8.1 ES数据管理概述

ES是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在ES中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。 ES使用JSON作为文档序列化格式。JSON现在已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。 ES存储的一个员工文档的格式示例:

代码语言:javascript
复制
{
"email": "584614151@qq.com",
"name": "张三",
"age": 30,
"interests": [ "篮球", "健身" ]
}

8.2 基本操作

1) 创建索引

格式: PUT /索引名称 举例: PUT /es_db

2) 查询索引

格式: GET /索引名称 举例: GET /es_db

3) 删除索引

格式: DELETE /索引名称 举例: DELETE /es_db

4) 添加文档

格式: PUT /索引名称/类型/id 举例:

代码语言:javascript
复制
PUT /es_db/_doc/1
{
"name": "张三",
"sex": 1,
"age": 25,
"address": "广州天河公园",
"remark": "java developer"
}
PUT /es_db/_doc/2
{
"name": "李四",
"sex": 1,
"age": 28,
"address": "广州荔湾大厦",
"remark": "java assistant"
}
PUT /es_db/_doc/3
{
"name": "rod",
"sex": 0,
"age": 26,
"address": "广州白云山公园",
"remark": "php developer"
}
PUT /es_db/_doc/4
{
"name": "admin",
"sex": 0,
"age": 22,
"address": "长沙橘子洲头",
"remark": "python assistant"
}
PUT /es_db/_doc/5
{
"name": "小明",
"sex": 0,
"age": 19,
"address": "长沙岳麓山",
"remark": "java architect assistant"
}
5) 修改文档

格式: PUT /索引名称/类型/id 举例:

代码语言:javascript
复制
PUT /es_db/_doc/1
{
"name": "白起老师",
"sex": 1,
"age": 25,
"address": "张家界森林公园",
"remark": "php developer assistant"                
}

注意:POST和PUT都能起到创建/更新的作用 1、需要注意的是==PUT==需要对一个具体的资源进行操作也就是要确定id才能进行==更新/创建,而==POST==是可以针对整个资源集合进行操作的,如果不写id就由ES生成一个唯一id进行==创建==新文档,如果填了id那就针对这个id的文档进行创建/更新 2、PUT只会将json数据都进行替换,POST只会更新相同字段的值。 3、PUT与DELETE都是幂等性操作,即不论操作多少次, 结果都一样。

6) 查询文档

格式: GET /索引名称/类型/id 举例: GET /es_db/_doc/1

7) 删除文档

格式: DELETE /索引名称/类型/id 举例: DELETE /es_db/_doc/1

9.Restful认识

Restful是一种面向资源的架构风格,可以简单理解为:使用URL定位资源,用HTTP动词(GET,POST,DELETE,PUT)描述操作。 基于Restful API ES和所有客户端的交互都是使用JSON格式的数据,其他所有程序语言都可以使用RESTful API,通过9200端口的与ES进行通信

用户做crud

代码语言:javascript
复制
Get http://localhost:8080/employee/1   
Get http://localhost:8080/employees
put http://localhost:8080/employee
{

}
delete http://localhost:8080/employee/1
Post http://localhost:8080/employee/1
{

}

使用Restful的好处:透明性,暴露资源存在。充分利用 HTTP 协议本身语义,不同请求方式进行不同的操作

10.查询操作

10.1 查询当前类型中的所有文档 _search

格式: GET /索引名称/类型/_search

举例: GET /es_db/_doc/_search

SQL: select * from student

10.2 条件查询, 如要查询age等于28岁的 _search?q=:**

格式: GET /索引名称/类型/_search?q=:**

举例: GET /es_db/_doc/_search?q=age:28

SQL: select * from student where age = 28

10.3 范围查询, 如要查询age在25至26岁之间的 _search?q=***[** TO **] 注意: TO 必须为大写

格式: GET /索引名称/类型/_search?q=***[25 TO 26]

举例: GET /es_db/_doc/_search?q=age[25 TO 26]

SQL: select * from student where age between 25 and 26

10.4 根据多个ID进行批量查询 _mget

格式: GET /索引名称/类型/_mget

举例: GET /es_db/_doc/_mget

{

"ids":["1","2"]

}

SQL: select * from student where id in (1,2)

10.5 查询年龄小于等于28岁的 :<=

格式: GET /索引名称/类型/_search?q=age:<=**

举例: GET /es_db/_doc/_search?q=age:<=28

SQL: select * from student where age <= 28

10.6 查询年龄大于28前的 :>

格式: GET /索引名称/类型/_search?q=age:>**

举例: GET /es_db/_doc/_search?q=age:>28

SQL: select * from student where age > 28

10.7 分页查询 from=&size=

格式: GET /索引名称/类型/_search?q=age[25 TO 26]&from=0&size=1

举例: GET /es_db/_doc/_search?q=age[25 TO 26]&from=0&size=1

SQL: select * from student where age between 25 and 26 limit 0, 1

10.8 对查询结果只输出某些字段 _source=字段,字段

格式: GET /索引名称/类型/_search?_source=字段,字段

举例: GET /es_db/_doc/_search?_source=name,age

SQL: select name,age from student

10.9 对查询结果排序 sort=字段:desc/asc

格式: GET /索引名称/类型/_search?sort=字段 desc

举例: GET /es_db/_doc/_search?sort=age:desc

SQL: select * from student order by age desc

11.文档批量操作

1.批量获取文档数据

批量获取文档数据是通过_mget的API来实现的

(1)在URL中不指定index和type

请求方式:GET 请求地址:_mget 功能说明 : 可以通过ID批量获取不同index和type的数据 请求参数: docs : 文档数组参数 _index : 指定index _type : 指定type _id : 指定id _source : 指定要查询的字段

代码语言:javascript
复制
GET _mget
{
"docs": [
{
"_index": "es_db",
"_type": "_doc",
"_id": 1
},
{
"_index": "es_db",
"_type": "_doc",
"_id": 2
}
]
}

响应结果如下:

代码语言:javascript
复制
{
  "docs" : [
    {
      "_index" : "es_db",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 3,
      "_seq_no" : 7,
      "_primary_term" : 1,
      "found" : true,
      "_source" : {
        "name" : "张三666",
        "sex" : 1,
        "age" : 25,
        "address" : "广州天河公园",
        "remark" : "java developer"
      }
    },
    {
      "_index" : "es_db",
      "_type" : "_doc",
      "_id" : "2",
      "_version" : 1,
      "_seq_no" : 1,
      "_primary_term" : 1,
      "found" : true,
      "_source" : {
        "name" : "李四",
        "sex" : 1,
        "age" : 28,
        "address" : "广州荔湾大厦",
        "remark" : "java assistant"
      }
    }
  ]
}
(2)在URL中指定index

请求方式:GET 请求地址:/{{indexName}}/_mget 功能说明 : 可以通过ID批量获取不同index和type的数据 请求参数: docs : 文档数组参数 _index : 指定index _type : 指定type _id : 指定id _source : 指定要查询的字段

代码语言:javascript
复制
GET /es_db/_mget
{
"docs": [
{
"_type":"_doc",
"_id": 3
},
{
"_type":"_doc",
"_id": 4
}
]
}
(3)在URL中指定index和type

请求方式:GET 请求地址:/{{indexName}}/{{typeName}}/_mget 功能说明 : 可以通过ID批量获取不同index和type的数据 请求参数: docs : 文档数组参数 _index : 指定index _type : 指定type _id : 指定id _source : 指定要查询的字段

代码语言:javascript
复制
GET /es_db/_doc/_mget
{
"docs": [
{
"_id": 1
},
{
"_id": 2
}
]
}

2.批量操作文档数据

批量对文档进行写操作是通过_bulk的API来实现的 请求方式:POST 请求地址:_bulk 请求参数:通过_bulk操作文档,一般至少有两行参数(或偶数行参数) 第一行参数为指定操作的类型及操作的对象(index,type和id) 第二行参数才是操作的数据 参数类似于:

代码语言:javascript
复制
{"actionName":{"_index":"indexName", "_type":"typeName","_id":"id"}}
{"field1":"value1", "field2":"value2"}

actionName:表示操作类型,主要有create,index,delete和update

(1)批量创建文档create
代码语言:javascript
复制
POST _bulk
{"create":{"_index":"article", "_type":"_doc", "_id":3}}
{"id":3,"title":"老师1","content":"666","tags":["java", "面向对象"],"create_time":1554015482530}
{"create":{"_index":"article", "_type":"_doc", "_id":4}}
{"id":4,"title":"老师2","content":"NB","tags":["java", "面向对象"],"create_time":1554015482530}
(2)普通创建或全量替换index
代码语言:javascript
复制
POST _bulk
{"index":{"_index":"article", "_type":"_doc", "_id":3}}
{"id":3,"title":"老师(一)","content":"666","tags":["java", "面向对象"],"create_time":1554015482530}
{"index":{"_index":"article", "_type":"_doc", "_id":4}}
{"id":4,"title":"老师(二)","content":"NB","tags":["java", "面向对象"],"create_time":1554015482530}

如果原文档不存在,则是创建 如果原文档存在,则是替换(全量修改原文档)

(3)批量删除delete
代码语言:javascript
复制
POST _bulk
{"delete":{"_index":"article", "_type":"_doc", "_id":3}}
{"delete":{"_index":"article", "_type":"_doc", "_id":4}}
(4)批量修改update
代码语言:javascript
复制
POST _bulk
{"update":{"_index":"article", "_type":"_doc", "_id":3}}
{"doc":{"title":"ES大法必修内功"}}
{"update":{"_index":"article", "_type":"_doc", "_id":4}}
{"doc":{"create_time":1554018421008}}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/02/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 7、指定IK分词器作为默认分词器
  • 8.ES数据管理
    • 8.1 ES数据管理概述
      • 8.2 基本操作
        • 1) 创建索引
        • 2) 查询索引
        • 3) 删除索引
        • 4) 添加文档
        • 5) 修改文档
        • 6) 查询文档
        • 7) 删除文档
    • 9.Restful认识
    • 10.查询操作
      • 10.1 查询当前类型中的所有文档 _search
        • 10.2 条件查询, 如要查询age等于28岁的 _search?q=:**
          • 10.3 范围查询, 如要查询age在25至26岁之间的 _search?q=***[** TO **] 注意: TO 必须为大写
            • 10.4 根据多个ID进行批量查询 _mget
              • 10.5 查询年龄小于等于28岁的 :<=
                • 10.6 查询年龄大于28前的 :>
                  • 10.7 分页查询 from=&size=
                    • 10.8 对查询结果只输出某些字段 _source=字段,字段
                      • 10.9 对查询结果排序 sort=字段:desc/asc
                      • 11.文档批量操作
                        • 1.批量获取文档数据
                          • (1)在URL中不指定index和type
                          • (2)在URL中指定index
                          • (3)在URL中指定index和type
                        • 2.批量操作文档数据
                          • (1)批量创建文档create
                          • (2)普通创建或全量替换index
                          • (3)批量删除delete
                          • (4)批量修改update
                      相关产品与服务
                      Serverless HTTP 服务
                      Serverless HTTP 服务基于腾讯云 API 网关 和 Web Cloud Function(以下简称“Web Function”)建站云函数(云函数的一种类型)的产品能力,可以支持各种类型的 HTTP 服务开发,实现了 Serverless 与 Web 服务最优雅的结合。用户可以快速构建 Web 原生框架,把本地的 Express、Koa、Nextjs、Nuxtjs 等框架项目快速迁移到云端,同时也支持 Wordpress、Discuz Q 等现有应用模版一键快速创建。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档