一、ES 索引 文档基本操作 命令 CURD
ES 镜像地址
https://elasticsearch.cn/download/
安装略过
使用 IK 分词器
1、ik_smart 最小划分
2、ik_max_word 最细粒度划分
GET _analyze
{
"analyzer": "ik_smart",
"text": "中国共产党是一个伟大的组织"
}
GET _analyze
{
"analyzer": "ik_max_word",
"text": "中国共产党是一个伟大的组织"
}
IK 分词器增加自己的分词
IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">ybs.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
ybs.dic
狂神说
魏元宝
重启ES
ES RestFul 风格
关于索引的基本操作
1、创建一个索引
PUT /索引名/类型名/文档id
{请求体}
PUT /test1/type1/1
{
"name": "狂神说",
"age": 3
}


完成了自动创建索引
2、指定字段类型 —— 创建索引规则 mappings
PUT /test2
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"age": {
"type": "integer"
},
"birthday":{
"type": "date"
}
}
}
}
3、获取索引规则! 可以通过GET 请求获取具体信息
GET test2
4、查看默认信息
PUT /test3/_doc/1
{
"name": "狂神说",
"age": 3,
"birthday": "1997-01-05"
}
GET test3
如果自己的文档字段没有指定,那么ES就会给我们默认配置字段类型


扩展:通过命令 ES 索引情况! 通过 _cat/ 可以获得es的当前的很多信息
GET _cat/health
GET _cat/indices?v
5、修改
修改的话版本号会增加 "_version" : 3, "result" : "updated",
可以通过PUT 或 POST 修改
PUT /test3/_doc/1
{
"name": "狂神说123",
"age": 3,
"birthday": "1997-01-05"
}
POST /test3/_doc/1/_update
{
"doc":{
"name": "狂神说456"
}
}
6、删除索引
通过 DELETE 命令实现删除、根据请求判断是删除索引还是删除文档记录
DELETE test1
使用RestFul 风格操作索引是推荐的操作方法
关于文档的基本操作
1、添加数据
PUT /ybs/user/1
{
"name": "元宝森",
"age": 23,
"birthday": "1997-01-05",
"desc": "一顿操作猛如虎,一看工资2500",
"tags":["技术宅", "温暖", "直男"]
}
PUT /ybs/user/2
{
"name": "张三",
"age": 23,
"birthday": "1997-01-05",
"desc": "法外狂徒",
"tags":["渣男", "冷冻", "扩列"]
}
PUT /ybs/user/3
{
"name": "李四",
"age": 23,
"birthday": "1997-01-05",
"desc": "随便",
"tags":["靓仔", "冷冻", "扩列"]
}
2、 获取数据 GET
GET /ybs/user/1
GET /ybs/user/2
GET /ybs/user/3
3、更新数据 PUT
PUT /ybs/user/3
{
"name": "李四五",
"age": 23,
"birthday": "1997-01-05",
"desc": "随便",
"tags":["靓仔", "冷冻", "扩列"]
}
"_version" : 2, 表示更新的次数
"result" : "updated",
4、POST _update 更新 (推荐使用)
POST /ybs/user/3/_update
{
"doc": {
"name": "李四五流",
"desc": "不随便",
"tags":["靓仔", "无所谓", "扩列"]
}
}
PUT 如果不传值会覆盖数据,POST灵活性更好
5、简单搜索
GET /ybs/user/3
简单的条件查询,可以根据默认的映射规则,产生基本的查询
GET ybs/user/_search?q=name:元宝森
6、复杂查询 select(排序,分页,高亮,模糊查询,精准查询)
-
"_score" : 0.8630463, 匹配度,值越高,匹配度越高
GET ybs/user/_search
{
"query": {
"match": {
"name": "李四"
}
}
}
-
hit:索引和文档的信息,查询的结果总数,查询出来的具体文档,数据中的东西就可以遍历出来了,可以通过score判断谁更加复杂结果。


-
输出结果不想要那么多! select name, desc from ----
GET ybs/user/_search
{
"query": {
"match": {
"name": "元宝"
}
},
"_source": ["name", "desc"]
}
我们之后使用Java 操作 Es,所有的方法和对象就是这里面的key!
-
排序 sort
GET ybs/user/_search
{
"query": {
"match": {
"name": "元宝"
}
},
"sort": [
{
"age": {
"order": "asc"
}
}
]
}
-
分页 from size 从几个开始 返回多少条
GET ybs/user/_search
{
"query": {
"match": {
"name": "元宝"
}
},
"sort": [
{
"age": {
"order": "asc"
}
}
],
"from": 0,
"size": 2
}
数据下标是从0开始的
/search/{current}/{pagesize}
-
布尔值查询 (多条件查询)
-
must(adn),所有的条件都要符合 where id=1 and name =xxx
-
should (or)两个条件满足其一即可
-
must_not (not)
-
filter 过滤
-
gt >
-
lt <
-
gte >=
-
ite <=
-
-
GET ybs/user/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "元宝"
}
},
{
"match": {
"age": 23
}
}
]
}
}
}
-
匹配多个条件 ( 多个条件 空格隔开,只要满足其中一个结果就可以查出,可以通过分值判断 )
GET ybs/user/_search
{
"query": {
"match": {
"tags": "男 技术"
}
}
}
-
精确查询
-
term 查询时直接通过倒排索引指定的词条进行精确查询
-
关于分词:
-
term,直接查询精确的词
-
match,会使用分词器解析!(先分析文档,然后再通过分析的文档进行查询)
-
-
两个类型
-
text:可以被分词器解析
-
keyword:不能被分词器解析
-
-
PUT testdb
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"desc":{
"type": "keyword"
}
}
}
}
PUT testdb/_doc/1
{
"name": "元宝森",
"desc": "一顿操作猛如虎,一看工资2500"
}
PUT testdb/_doc/2
{
"name": "元宝森1",
"desc": "一顿操作猛如虎,一看工资3500"
}
GET _analyze
{
"analyzer": "keyword",
"text": "元宝"
}
GET _analyze
{
"analyzer": "standard",
"text": "元宝森"
}
GET testdb/_search
{
"query": {
"term": {
"name": "宝"
}
}
}
GET testdb/_search
{
"query": {
"term": {
"desc": "一顿操作猛如虎,一看工资2500"
}
}
}
-
多个值匹配精确查询
GET testdb/_search
{
"query": {
"bool": {
"should": [
{
"term": {
"t1": "11"
}
},
{
"term": {
"t2": "44"
}
}
]
}
}
}
-
高亮查询
-
在搜索的结果中可以高亮显示
-
GET ybs/user/_search
{
"query": {
"match": {
"name": "元宝"
}
},
"highlight": {
"fields": {
"name":{}
}
}
}
-
自定义搜索高亮条件
GET ybs/user/_search
{
"query": {
"match": {
"name": "元宝"
}
},
"highlight": {
"pre_tags": "<p class='key' style='color:red'>",
"post_tags": "</p>",
"fields": {
"name":{}
}
}
}