Elasticsearch总结笔记
Posted calmtho
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch总结笔记相关的知识,希望对你有一定的参考价值。
文章目录
简介
- 底层使用的lucene引擎,lucene引擎直接使用相对复杂,有一定的学习成本,同样是使用Java编写,Elasticsearch使用的rest风格的进行交互,而数据呢则是以JSON的方式进行传输。
- 学习Elasticsearch要求使用的JDK版本在8以上。Elasticsearch主要用于检索,尤其是其全文检索的能力,以及自带乐观锁以及友好的集群,让它越来越受欢迎。
- 使用Elasticsearch首先要指定是如何定位数据。即三要素进行定位,index索引,type类型,id主键(
_index,_type,_id
) - PUT,DELETE,POST,GET(使用的方法都是
大写
,大括号在请求下一行)4种REST请求方式即完成增删改查,当然在ES中改其实是先把旧的移除,重新创建一个新的文档,PUT也可以更新,但是是整体更新,POST则是可以内容追加,不过也是一个新的文档。 - 1.映射(
Mapping
)
描述数据在每个字段内如何存储
2.分析(Analysis
)
全文是如何处理使之可以被搜索的
3.领域特定查询语言(Query DSL
)
Elasticsearch 中强大灵活的查询语言
类型
ES的基本类型有:(和关系型SQL区别不需要设置字段的长度)
字符串:text,keyword
数字类型:integer,long
浮点类型"float,double,
布尔类型:boolean,
时间类型:date
在ES中默认只有text类型可以分词,分词使用英文引擎,按照单词分词,如果是中文进行查询的话,则是将数据变成单字分词
增删改查操作
查:
GET /索引名(即数据库)/_doc/_id(记录id值)
增(覆盖式)
PUT /索引名(即数据库)/_doc/_id(记录id值)
_id:''
改:(增量式)
POST /索引名(即数据库)/_doc/_id(记录id值)
要修改的字段
删除
DELETE /索引名(即数据库)/_doc/_id(记录id值)
批量操作
POST /索引名(即数据库)/_doc/_bulk
批量的文档(需注意每行文档记录不能换行)
高级查询:(Query DSL
)
1.查询所有
GET /索引名(即数据库)/_search
"query":
"match_all":
2.term条件查询
GET /索引名(即数据库)/_search
"query":
"term":
3.range范围查询
GET /索引名(即数据库)/_search
"query":
"range":
"字段":
"gt":"值",
"lte":"值"
3.前缀查询
GET /索引名(即数据库)/_search
"query":
"prefix":
"字段":"值"
4.通配符查询
*是通配(可以匹配多个长度的),?是占位(匹配固定长度,如goo?,可匹配good,但不能god,匹配的字符长度是固定的)
GET /索引名/_search
"query":
"wildcard":
"字段":
"value": "值* "
5.ids查询
GET /索引名/_search
"query":
"ids":
"values": id数组
6.模糊查询[fuzzy]
GET /products/_search
"query":
"fuzzy":
"字段":"值"
模糊查询[fuzzy],切记使用有以下规则
fuzzy 关键字: ⽤来模糊查询含有指定关键字的⽂档
注意: fuzzy 模糊查询 最⼤模糊错误 必须在0-2之间
搜索关键词⻓度为 2 不允许存在模糊
搜索关键词⻓度为3-5 允许⼀次模糊
搜索关键词⻓度⼤于5 允许最⼤2模糊
7.布尔查询
这个其实就是基本类似于关系性SQL中的:exist,not exist 等语法
bool 关键字: ⽤来组合多个条件实现复杂查询
must: 相当于&& 同时成⽴
should: 相当于|| 成⽴⼀个就⾏
must_not: 相当于! 不能满⾜任何⼀个
GET /索引名/_search
"query":
"bool":
"must": [
"term":
要求的条件JSON
]
8.多字段查询[multi_match]
GET /索引名/_search
"query":
"multi_match":
"query": "值",
"fields":字段数组
注意: 字段类型分词,将查询条件分词之后进⾏查询改字段 如果该字段不分词就会
将查询条件作为整体进⾏查询
9.默认字段分词查询[query_string]
GET /索引名/_search
"query":
"query_string":
"default_field": "查询字段",
"query": "值"
注意: 查询字段分词就将查询条件分词查询,查询字段不分词将查询条件不分词查询
10.⾼亮查询[highlight]
highlight 关键字: 可以让符合条件的⽂档中的关键词⾼亮
GET /索引名/_search
"query":
"term":
"字段":
"value": "值"
,
"highlight":
"fields":
"*":
⾃定义⾼亮html标签: 可以在highlight中使⽤ pre_tags 和 post_tags
GET /索引名/_search
"query":
"term":
"字段":
"value": "值"
,
"highlight":
"post_tags": ["</span>"],
"pre_tags": ["<span style='color:red'>"],
"fields":
"*":
多字段⾼亮 使⽤ require_field_match 开启多个字段⾼亮
GET /索引名/_search
"query":
"term":
"字段":
"value": "值"
,
"highlight":
"require_field_match": "false",
"post_tags": ["</span>"],
"pre_tags": ["<span style='color:red'>"],
"fields":
"*":
11.分页查询
利用from,和size,起始页同样是0开始,0即第一页
返回指定条数[size]
size 关键字: 指定查询结果中返回指定条数。 默认返回值10条
分⻚查询[form]
from 关键字: ⽤来指定起始返回位置,和size关键字连⽤可实现分⻚效
果
GET /索引/_search
"query":
"match_all":
,
"size": 5,
"from": 0
指定字段排序[sort]
GET /索引名/_search
"query":
"match_all":
,
"sort": [
"字段":
"order": "desc"
]
12.返回指定字段[_source]
_source 关键字: 是⼀个数组,在数组中⽤来指定展示那些字段
GET /索引名/_search
"query":
"match_all":
,
"_source": 要展示的指定字段数组
索引原理
倒排索引(Inverted Index) 也叫反向索引,有反向索引必有正向索引。
通俗地来讲, 正向索引是通过key找value,反向索引则是通过value找key。
ES底层在检索时底层使⽤的就是倒排索引。
在ES中除了text类型分词,其他类型不分词,因此根据不同字段创建索引。就将文档的内容根据text字段内容先进行一个默认分词,然后将每个分词有默认的,id映射,当我们查询的时候,ES会将我们搜索条件进行分词,再用搜索的分词条件和我们数据的分词内容进行一定的算法匹配,然后找到id,再关联回我们的文档数据,形成一个命中记录集合,并根据匹配算法的匹配程度给文档打分,并返回整一个结果集
本质是使用了空间换时间的实现,搜索来了只要拿搜索关键词和我们的分词关键词比较即可,所以会很快。
注意: Elasticsearch : Elasticsearch分别为每个字段都建⽴了⼀个倒排索引。因此查询
时查询字段的term, term,就能知道⽂档ID,就能快速找到⽂档。
以上是关于Elasticsearch总结笔记的主要内容,如果未能解决你的问题,请参考以下文章