ElasticSearch笔记

网友投稿 670 2022-05-29

elasticsearch简介

ElasticSearch(简称ES)

Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。 能够达到实时搜索,稳定,可靠,快速,安装使用方便。 客户端支持Java、.NET(C#)、PHP、Python、Ruby等多种语言。

官方网站:https://www.elastic.co/

-:https://www.elastic.co/cn/start

ElasticSearch与Lucene的关系

ElasticSearch笔记

Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库(框 架) 但是想要使用Lucene,必须使用Java来作为开发语言并将其直接集成到你的应用 中,并且Lucene的配置及使用非常复杂,你需要深入了解检索的相关知识来理解 它是如何工作的。

Lucene缺点:

只能在Java项目中使用,并且要以jar包的方式直接集成项目中。

使用非常复杂-创建索引和搜索索引代码繁杂。

不支持集群环境-索引数据不同步(不支持大型项目)。

索引数据如果太多就不行,索引库和应用所在同一个服务器,共同占用 硬盘.共用空间少。

上述Lucene框架中的缺点,ES全部都能解决。

ES vs Solr比较

当单纯的对已有数据进行搜索时,Solr更快。

当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明 显的优势。

大型互联网公司,实际生产环境测试,将搜索引擎从Solr转到 Elasticsearch以 后的平均查询速度有了50倍的提升。

总结:

二者安装都很简单。

Solr 利用 Zookeeper 进行分布式管理,而Elasticsearch 自身带有分布式 协调管理功能。

Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支 持json文件格式。

Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用 时效率明显低于Elasticsearch。

Solr 是传统搜索应用的有力解决方案,但 Elasticsearch更适用于新兴的实 时搜索应用。

Lucene全文检索框架

什么是全文检索

全文检索是指:

通过一个程序扫描文本中的每一个单词,针对单词建立索引,并保存 该单词在文本中的位置、以及出现的次数.

用户查询时,通过之前建立好的索引来查询,将索引中单词对应的文 本位置、出现的次数返回给用户,因为有了具体文本的位置,所以就可以 将具体内容读取出来了

分词原理之倒排索引

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

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

测试分词效果:

ES数据管理

ES数据管理概述

ES是面向文档(document oriented)的,这意味着它可以存储整个对象或文档 (document)。

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

ES存储的一个员工文档的格式示例:

基本操作

格式: PUT /索引名称

举例: PUT /es_db

格式: GET /索引名称

举例: GET /es_db

格式: DELETE /索引名称

举例: DELETE /es_db

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

举例:

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

举例:

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

举例: GET /es_db/_doc/1

格式: DELETE /索引名称/类型/id

举例: DELETE /es_db/_doc/1

查询操作

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

举例: GET /es_db/_doc/_search

SQL: select * from student

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

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

SQL: select * from student where age = 28

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

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

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

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

举例: GET /es_db/_doc/_mget

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

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

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

SQL: select * from student where age <= 28

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

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

SQL: select * from student where age > 28

格式: 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

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

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

SQL: select name,age from student

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

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

SQL: select * from student order by age desc

Elasticsearch Lucene/Solr 实时流计算服务 CS

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何搭建自己的中文Git版本库:Gitlab容器化部署
下一篇:初识Python,开篇知识点就选字符串吧~
相关文章