es操作
一、索引库管理
1、创建索引库
方法:put url:http://192.168.68.129:9200/{index}
分片数:默认索引库需要分片的,所有片加起来才是一个完整的索引库。每个分片中保存的内容是不同的。分片一经设定无法修改。es6及之前的版本默认是5个分片,ES7中默认是一个分片。 副本数:如果是1代表给每个分片创建一个副本。起到备份以及负载均衡的作用。后期可以修改。 主分片和副本分片一定是分散到不同的节点上存储。
集群健康值:绿色:健康, 所有分片成功分配。 黄色:亚健康, 集群可用,但是存在风险,有副本分片未成功分配。 红色:集群不可用, 分片不完整的状态。
2、删除索引库
方法:delete url:http://192.168.68.129:9200/{index}
3、设置mapping
1)创建索引库时设置mappingES6:
方法:put url:http://192.168.68.129:9200/{index} 请求体:
{ "mappings":{ "myblog":{ "properties":{ "id":{ "type":"integer", "store":true }, "title":{ "type":"text", "store":true }, "content":{ "type":"text", "store":true }, "tag":{ "type":"keyword" } } } } }
-- 在ES6中可以设置type的名称,但是ES6中只允许定义一个Type -- 在ES7中是不可以定义type,已经把type概念删除了。
查找mappingd的url:http://192.168.68.129:9200/{index}/_mapping 返回体:
{ "properties":{ "id":{ "type":"integer", "store":true }, "title":{ "type":"text", "store":true }, "content":{ "type":"text", "store":true }, "tag":{ "type":"keyword" } } }
二、文档的管理
1、添加文档
方法:put, url:/{index}/{type}/{_id} 请求体:
{ "id":1, "title":"elasticsearch是什么", "content":"elasticsearch是一个全文检索引擎", "tag":"es" }
注意:在添加文档之前应该设置好mapping,如果不设置mapping也可以添加文档,es会自动根据文档推断出mapping。自动推断的mapping未必是我们想要的格式。
2、更新文档
方法:put、post 和添加完全相同。只要_id的值保持一致就会把原来的文档删除,然后添加一个新的文档,这就是更新。 更新的本质就是先删除后添加。
3、删除文档
方法:delete url:/{index}/{type}/{_id}
4、根据_id取文档
方法:get url:/{index}/{type}/{_id}
三、查询表达式
在ES中提供多种形式的Query。 在Lucene中Query是所有查询的父类,是一个抽象类。
1、查询方法
方法:GET、POST url:/{index}/{type}/_search
请求体:
{ "query":{ xxxxx:xxxx --查询条件 } }
2、查询全部文档
{ "query":{ "match_all":{} } }
3、根据term查询
term最基础的查询,不允许分词。必须指定一个索引中存在的关键词才能查询出结果,如果指定的关键词在索引中不存在那么就没有结果。
{ "query":{ "term":{ "name":"java" } } }
4、match查询
可以根据一个字符串进行查询,先对查询的内容分词,然后再查询。
{ "query": { "match": { "title": "java是什么东西" } } }
5 query_string查询
POST localhost:9200/blog1/article/_search
{ "query": { "query_string": { "default_field": "title", "query": "搜索服务器" } } }
6 multi_match查询:
{ "query": { "multi_match": { "query": "李四", "fields": [ "name", "address" ] } } }
7、bool查询
组合条件查询,把多个条件组合到一起。多个条件之间可以使用:AND、OR、NOT
must:相当于AND
should:相当于OR
must_not:相当于NOT
filter:过滤查询, 也可以指定多个条件,不同的是filter不需要打分。
四、中文分词器
ES中默认使用StandardAnalyzer,处理中文就是一个汉字一个关键词。
1)测试分词器的分词效果 get /_analyze
{ "analyzer":"standard", "text":"处理中文就是一个汉字一个关键词" }
2)IKAnalyzer
对应每个ES版本都有一个分词器的版本。
提供两个分词算法:
ik_smart:分词少,速度快
ik_max_word:分词多,速度慢
3)使用方法
设置mapping是指定使用什么分词器。
mapping一旦设置无法修改。
在创建索引库时设置好mapping。
java api 工程:https://gitee.com/sublun/wuchen-search
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)