当前位置:首页 » 《随便一记》 » 正文

Elasticsearch总结笔记

3 人参与  2023年02月28日 19:29  分类 : 《随便一记》  评论

点击全文阅读


文章目录

简介类型增删改查操作索引原理

简介

底层使用的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,就能快速找到⽂档。


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/53496.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1