ElasticSearch 基本原理之全文检索

7 篇文章 1 订阅
订阅专栏

一、开篇几个问题

1.大规模数据如何检索?

当系统数据量上了10亿、100亿条的时候,我们在做系统架构的时候通常会从以下角度去考虑:

1)用什么数据库好?(MySQL、sybase、Oracle、达梦、神通、MongoDB、Hbase…)

MySQL:通过分库分表可以存海量数据,但是做数据检索效率是达不到毫秒级别,并且数据检索只能支持模糊查询,不支持全文检索、分词检索

以上数据库都可以做海量数据存储,但都不适合做检索的工作。

2)如何解决单点故障;(lvs、F5、A10、Zookeeper、MQ)

集群,要考虑故障转移的问题,就需要借助lvs、F5、A10、Zookeeper来维护配置

MQ,可以做大量数据的缓存队列,例如滴滴,后台存储了大量的数据,数据实时不停的产生,每天产生400T的数据,这么大量的数据必须要有一个缓存队列进行缓存,然后再写入到库里

3)如何保证数据安全性;(热备、冷备、异地多活)

保证数据不会丢失,做备份

4)如何解决检索难题;(数据库代理中间件:mysql-proxy、Cobar、MaxScale等;)

分库分表后的检索问题

5)如何解决统计分析问题;(离线、近实时)

以上数据库做数据统计分析都要自己实现

思考如果自己设计可以从哪些方面考虑:
在这里插入图片描述

2.传统数据库的应对解决方案?

对于关系型数据,我们通常采用以下或类似架构去解决查询瓶颈和写入瓶颈:
解决要点:
1)通过主从备份解决数据安全性问题;
2)通过数据库代理中间件心跳监测,解决单点故障问题;
3)通过代理中间件将查询语句分发到各个slave节点进行查询,并汇总结果
4)通过分表分库解决读写效率问题

在这里插入图片描述

1.数据库并不适合做海量数据的检索,通常项目实践中不会让并发请求最终落在数据库上,数据库中每个sql本身都代表了锁,因此性能并不是太高,尤其面对海量数据,并发量高的情况
2.同时数据库只能做模糊查询的检索,并不能做全文分词检索

3.非关系型数据库的解决方案?

对于Nosql数据库,以redis为例,其它原理类似, 解决要点:
1)通过副本备份保证数据安全性;
2)通过节点竞选机制解决单点问题;
3)先从配置库检索分片信息,然后将请求分发到各个节点,最后由路由节点合并汇总结果

在这里插入图片描述

Redis做全文检索是不可能的,本身就是key-value数据结构
并且服务器内存是有限制的,不能无限制存储数据

4.完全把数据放入内存怎么样?

完全把数据放在内存中是不可靠的,实际上也不太现实,当我们的数据达到PB级别时,按照每个节点96G内存计算,在内存完全装满的数据情况下,我们需要的机器是:

1PB=1024T=1048576G
节点数=1048576/96=10922个

实际上,考虑到数据备份,节点数往往在2.5万台左右。成本巨大决定了其不现实!

从前面我们了解到,把数据放在内存也好,不放在内存也好,都不能完完全全解决问题。
全部放在内存速度问题是解决了,但成本问题上来了。

为解决以上问题,从源头着手分析,通常会从以下方式来寻找方法:
1、磁盘存储顺序存储;
2、将数据和索引分离;
3、压缩数据;
4、热点数据放内存
5、多线程

以上5个特点就是ElasticSearch的特点(ElasticSearch对堆内存的要求比较高,一个节点最高占用30G)

在这里插入图片描述

二、全文检索技术

1.什么是全文检索?

什么叫做全文检索呢?这要从我们生活中的数据说起。

我们生活中的数据总体分为两种:结构化数据和非结构化数据

  • 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。
  • 非结构化数据:指不定长或无固定格式的数据,如 互联网数据、邮件,word文档等。

对非结构化数据顺序扫描很慢,对结构化数据的搜索却相对较快,那么把我们的非结构化数据想办法弄得有一定结构不就行了吗?这就是全文检索的基本思路,也就是将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引

非结构化数据又一种叫法叫全文数据。

在这里插入图片描述

按照数据的分类,搜索也分为两种:

  • 对结构化数据的搜索: 如对数据库的搜索,用SQL语句。再如对元数据的搜索,如利用windows搜索对文件名,类型,修改时间进行搜索等。
  • 对非结构化数据的搜索: 如用Google和百度可以搜索大量内容数据。

对非结构化数据也即全文数据的搜索主要有两种方法:顺序扫描法和反向索引法

  • 顺序扫描法:所谓顺序扫描法,就是顺序扫描每个文档内容,看看是否有要搜索的关键字,实现查找文档的功能,也就是根据文档找词。
  • 反向索引法:所谓反向索引,就是提前将搜索的关键字建成索引,然后再根据索引查找文档,也就是根据词找文档。

在这里插入图片描述

这种先建立索引再对索引进行搜索文档的过程就叫全文检索(Full-text Search)

在这里插入图片描述
数据库只能做精确匹配,不能分词搜索,并且效率低。

2.全文检索场景

  • 搜索引擎(对算法、数据结构要求较高)
  • 站内搜索(直接使用ElasticSearch基本可以满足)
  • 系统文件搜索

3.全文检索相关技术

  1. Lucene:如果使用该技术实现,需要对Lucene的API和底层原理非常了解,而且需要编写大量的Java代码。
  2. Solr:使用java实现的一个web应用,可以使用rest方式的http请求,进行远程API的调用。
  3. ElasticSearch(ES):可以使用rest方式的http请求,进行远程API的调用。

Solr和ElasticSearch底层都是基于Lucene

4.Solr和ES的比较

ElasticSearch vs Solr 检索速度

  • 当单纯的对已有数据(静态数据,不会发生变化的数据)进行搜索时,Solr更快。
    在这里插入图片描述

  • 当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势。
    在这里插入图片描述

  • 随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化。
    在这里插入图片描述

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

总结:

  • 二者安装都很简单;
  • Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;
  • Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;
  • Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能都由第三方插件提供;
  • Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于Elasticsearch。

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

三、全文检索的流程分析

1.什么是索引

  有人可能会说,对非结构化数据顺序扫描很慢,对结构化数据的搜索却相对较快(由于结构化数据有一定的结构可以采取一定的搜索算法加快速度),那么把我们的非结构化数据想办法弄得有一定结构不就行了吗?
  这种想法很天然,却构成了全文检索的基本思路,也即将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。
  这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引
  这种说法比较抽象,举几个例子就很容易明白,比如字典,字典的拼音表和部首检字表就相当于字典的索引,对每一个字的解释都是非结构化的,如果字典没有拼音表和部首检字表,在茫茫辞海中找一个字只能顺序扫描。然而字的某些信息可以提取出来进行结构化处理,比如读音,就比较结构化,分声母和韵母,分别只有几种可以 一一列举,于是将读音拿出来按一定的顺序排列,每一项读音都指向此字的详细解释的页数。我们搜索时按结构化的拼音搜到读音,然后按其指向的页数,便可找到 我们的非结构化数据——也即对字的解释

2.流程总览

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
索引库创建过程
在这里插入图片描述
索引库搜索过程
在这里插入图片描述

全文检索的流程分为两大流程:索引创建、搜索索引

  • 索引创建:将现实世界中所有的结构化和非结构化数据提取信息,创建索引的过程。
  • 搜索索引:就是得到用户的查询请求,搜索创建的索引,然后返回结果的过程。

在这里插入图片描述

要想搞清楚全文检索,必须要搞清楚下面三个问题:

  • 1.索引库里面究竟存些什么?(Index)
  • 2.如何创建索引?(Indexing)
  • 3.如何对索引进行搜索?(Search)

3.创建索引流程

3.1原始内容

原始内容是指要索引和搜索的内容。

原始内容包括互联网上的网页、数据库中的数据、磁盘上的文件等。

3.2获得文档

也就是采集数据,从互联网上、数据库、文件系统中等获取需要搜索的原始信息,这个过程就是信息采集

采集数据的目的是为了将原始内容存储到Document对象中。

如何采集数据?

  1. 对于互联网上网页,可以使用工具将网页抓取到本地生成html文件。
  2. 数据库中的数据,可以直接连接数据库读取表中的数据。
  3. 文件系统中的某个文件,可以通过I/O操作读取文件的内容。

在Internet上采集信息的软件通常称为爬虫或蜘蛛,也称为网络机器人,爬虫访问互联网上的每一个网页,将获取到的网页内容存储起来。

3.3创建文档对象

创建文档的目的是统一数据格式(Document),方便文档分析。
在这里插入图片描述

说明:
1.一个Document文档中包括多个域(Field),域(Field)中存储内容。
2.这里我们可以将数据库中一条记录当成一个Document,一列当成一个Field

3.4分析文档(重点)

分析文档主要是对Field域进行分析,分析文档的目的是为了索引。
在这里插入图片描述
说明:分析文档主要通过分词组件(Tokenizer)和语言处理组件(Linguistic Processor)完成

3.4.1分词组件

分词组件工作流程(此过程称之为Tokenize)

  1. 将Field域中的内容进行分词(不同语言有不同的分词规则)
  2. 去除标点符号。
  3. 去除停用词(stop word)。

经过分词(Tokenize)之后得到的结果成为词元(Token)

所谓停用词(Stop word)就是一种语言中最普通的一些单词,由于没有特别的意义,因而大多数情况下不能成为搜索的关键词,因而创建索引时,这种词会被去掉而减少索引的大小。
英语中停词(Stop word)如:“the”,“a”,“this”等。
对于每一种语言的分词组件(Tokenizer),都有一个停词(stop word)集合。

示例(Document1的Field域和Document2的Field域是同名的):

  • Document1的Field域:

    Students should be allowed to go out with their friends, but not allowed to drink beer.

  • Document2的Field域:

    My friend Jerry went to school to see his students but found them drunk which is not allowed.

  • 在我们的例子中,便得到以下词元(Token)

    “Students”,“allowed”,“go”,“their”,“friends”,“allowed”,“drink”,“beer”,“My”,“friend”,“Jerry”,“went”,“school”,“see”,“his”,“students”,“found”,“them”,“drunk”,“allowed”。

将得到的词元(Token)传给语言处理组件(Linguistic Processor)

3.4.2语言处理组件

语言处理组件(linguistic processor)主要是对得到的词元(Token)做一些同语言相关的处理。

对于英语,语言处理组件(Linguistic Processor)一般做以下几点:

  • 1.变为小写(Lowercase)。
  • 2.将单词缩减为词根形式,如“cars”到“car”等。这种操作称为:stemming。
  • 3.将单词转变为词根形式,如“drove”到“drive”等。这种操作称为:lemmatization。

语言处理组件(linguistic processor)的结果称为词(Term)。Term是索引库的最小单位。

  • 在我们的例子中,经过语言处理,得到的词(Term)如下:

    “student”,“allow”,“go”,“their”,“friend”,“allow”,“drink”,“beer”,“my”,“friend”,“jerry”,“go”,“school”,“see”,“his”,“student”,“find”,“them”,“drink”,“allow”。

    也正是因为有语言处理的步骤,才能使搜索drove,而drive也能被搜索出来。

3.5索引创建

索引的目的是为了搜索。
在这里插入图片描述

说明:将得到的词(Term)传给索引组件(Indexer),索引组件(Indexer)主要做以下几件事情:

3.5.1创建Term字典

在我们的例子中字典如下:
在这里插入图片描述

3.5.2排序Term字典

对字典按字母顺序进行排序
在这里插入图片描述

3.5.3合并Term字典

合并相同的词(Term)成为文档倒排(Posting List)链表
在这里插入图片描述

在此表中,有几个定义:

  • Document Frequency 即文档频次,表示总共有多少文件包含此词(Term)。
  • Frequency 即词频率,表示此文件中包含了几个此词(Term)。

到此为止,索引已经创建好了。

最终的索引结构是一种倒排索引结构也叫反向索引结构,包括索引和文档两部分,索引即词汇表,它的规模较小,而文档集合较大。

倒排索引结构是根据内容(词汇)找文档,如下图:
在这里插入图片描述

3.6创建索引流程总结

分词及检索的详细的流程:
在这里插入图片描述

上图详细演示了一下: 创建索引的过程 (此过程为英文环境下的索引库构建过程,中文有一定差异)

4.搜索索引流程

4.1查询语句

在这里插入图片描述

4.2执行搜索

4.2.1第一步:对查询语句进行词法分析、语法分析及语言处理。

1、词法分析
如上述例子中,经过词法分析,得到单词有lucene,learned,hadoop, 关键字有AND, NOT。

注意:关键字必须大写,否则就作为普通单词处理。
在这里插入图片描述

2、语法分析
如果发现查询语句不满足语法规则,则会报错。如lucene NOT AND learned,则会出错。

如上述例子,lucene AND learned NOT hadoop形成的语法树如下:
在这里插入图片描述

3、语言处理
如learned变成learn等。
经过第二步,我们得到一棵经过语言处理的语法树。
在这里插入图片描述

4.2.2第二步:搜索索引,得到符号语法树的文档。

1、 首先,在反向索引表中,分别找出包含lucene,learn,hadoop的文档链表。
2、 其次,对包含lucene,learn的链表进行合并操作,得到既包含lucene又包含learn的文档链表。
在这里插入图片描述

3、 然后,将此链表与hadoop的文档链表进行差操作,去除包含hadoop的文档,从而得到既包含lucene又包含learn而且不包含hadoop的文档链表。
在这里插入图片描述

4、 此文档链表就是我们要找的文档。
在这里插入图片描述

4.2.3第三步:根据得到的文档和查询语句的相关性,对结果进行排序。

相关度自然打分(权重越高分越高):

  • tf越高、权重越高(tf代表该词在文档中出现的频率)
  • df越高、权重越低(df代表包含该词的文档的数量)

人为影响分数:

  • 设置Boost值(加权值)

5.Lucene相关度排序

5.1什么是相关度排序

相关度排序是查询结果按照与查询关键字的相关性进行排序,越相关的越靠前。比如搜索“Lucene”关键字,与该关键字最相关的文章应该排在前边。

5.2相关度打分

Lucene对查询关键字和索引文档的相关度进行打分,得分高的就排在前边。

如何打分呢?Lucene是在用户进行检索时实时根据搜索的关键字计算出来的,分两步:

  1. 计算出词(Term)的权重
  2. 根据词的权重值,计算文档相关度得分。

什么是词的权重?
通过索引部分的学习,明确索引的最小单位是一个Term(索引词典中的一个词)。搜索也是从索引域中查询Term,再根据Term找到文档。Term对文档的重要性称为权重,影响Term权重有两个因素:

  • Term Frequency (tf):
    指此Term在此文档中出现了多少次。tf 越大说明越重要
    词(Term)在文档中出现的次数越多,说明此词(Term)对该文档越重要,如“Lucene”这个词,在文档中出现的次数很多,说明该文档主要就是讲Lucene技术的。
  • Document Frequency (df):
    指有多少文档包含此Term。df 越大说明越不重要
    比如,在一篇英语文档中,this出现的次数更多,就说明越重要吗?不是的,有越多的文档包含此词(Term), 说明此词(Term)太普通,不足以区分这些文档,因而重要性越低。

5.3.设置boost值影响相关度排序

boost是一个加权值(默认加权值为1.0f),它可以影响权重的计算。在索引时对某个文档中的field设置加权值,设置越高,在搜索时匹配到这个文档就可能排在前边。

6.Lucene的Field域

6.1Field属性

Field是文档中的域,包括Field名和Field值两部分,一个文档可以包括多个Field,Document只是Field的一个承载体,Field值即为要索引的内容,也是要搜索的内容。

属性可选值
是否分词(tokenized)* 是:作分词处理,即将Field值进行分词,分词的目的是为了索引。
比如:商品名称、商品描述等,这些内容用户要输入关键字搜索,由于搜索的内容格式大、内容多需要分词后将语汇单元建立索引

* 否:不作分词处理
比如:商品id、订单号、身份证号等
是否索引(indexed)* 是:进行索引。将Field分词后的词或整个Field值进行索引,存储到索引域,索引的目的是为了搜索。
比如:商品名称、商品描述分析后进行索引,订单号、身份证号不用分词但也要索引,这些将来都要作为查询条件。

* 否:不索引。
比如:图片路径、文件路径等,不用作为查询条件的不用索引
是否存储(stored)* 是:将Field值存储在文档域中,存储在文档域中的Field才可以从Document中获取。
比如:商品名称、订单号,凡是将来要从Document中获取的Field都要存储。

* 否:不存储Field值
比如:商品描述,内容较大不用存储。如果要向用户展示商品描述可以从系统的关系数据库中获取。

6.2Field常用类型

下边列出了开发中常用 的Filed类型,注意Field的属性,根据需求选择:

Field类数据类型Analyzed 是否分词Indexed 是否索引Stored 是否存储说明
StringField(FieldName, FieldValue,Store.YES))字符串NYY或N这个Field用来构建一个字符串Field,但是不会进行分词,会将整个串存储在索引中,比如(订单号,身份证号等) 是否存储在文档中用Store.YES或Store.NO决定
LongField(FieldName, FieldValue,Store.YES)Long型YYY或N这个Field用来构建一个Long数字型Field,进行分词和索引,比如(价格) 是否存储在文档中用Store.YES或Store.NO决定
StoredField(FieldName, FieldValue)重载方法,支持多种类型NNY这个Field用来构建不同类型Field 不分析,不索引,但要Field存储在文档中
TextField(FieldName, FieldValue, Store.NO) 或 TextField(FieldName, reader)字符串 或 流YYY或N如果是一个Reader, lucene猜测内容比较多,会采用Unstored的策略.

6.3Field设计

Field域如何设计,取决于需求,比如搜索条件有哪些?显示结果有哪些?

字段设计
商品id是否分词:不用分词,因为不会根据商品id来搜索商品
是否索引:不索引,因为不需要根据商品ID进行搜索
是否存储:要存储,因为查询结果页面需要使用id这个值。
商品名称是否分词:要分词,因为要根据商品名称的关键词搜索。
是否索引:要索引。
是否存储:要存储。
商品价格是否分词:要分词,lucene对数字型的值只要有搜索需求的都要分词和索引,因为lucene对数字型的内容要特殊分词处理,需要分词和索引。
是否索引:要索引
是否存储:要存储
商品图片地址是否分词:不分词
是否索引:不索引
是否存储:要存储
商品描述是否分词:要分词
是否索引:要索引
是否存储:因为商品描述内容量大,不在查询结果页面直接显示,不存储。

常见问题:
不存储是指不在lucene的索引域中记录,目的是为了节省lucene的索引文件空间。

如果要在详情页面显示描述,解决方案:
从lucene中取出商品的id,根据商品的id查询关系数据库(MySQL)中item表得到描述信息。

ElasticSearch机制解析
06-01 517
1.全文检索 应用程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置。 当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。 这个过程类似于通过字典中的检索字表查字的过程。全文搜索搜索引擎数据库中的数据。 ElasticSearch全文检索原理是倒排索引。 2.倒排索引原理 使用倒排索引,需要查询和给定关键字有关的东西时,就...
分布式全文检索引擎ElasticSearch原理及使用实例
12-16
Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下...
【数据库学习】Elasticsearch(ES)原理
午后阳光
10-01 3065
Elasticsearch索引的精髓:一切设计都是为了提高搜索的性能 1,正向索引和反向索引 1)正向索引(正排索引) 从文档中查找字符串。关系型数据库使用的是正向索引。 2)反向索引(倒排索引) 从字符串查找文档。搜索引擎lucene使用的是反向索引。 假设有这么几条数据: ID Name Age Sex 1 Kate 24 Female 2 John 24 Male ...
基于 ElasticSearch 实现站内全文搜索,写得太好了
最新发布
2401_84048467的博客
04-12 557
搜索引擎服务使用ElasticSearch提供的对外web服务选则springboot web。
全文检索 Elasticsearch(简称es)
热门推荐
CORN的博客
06-04 1万+
全文检索 Elasticsearch 研究 1. ElasticSearch 介绍 1.1 介绍 **Elasticsearch**是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,具有HTTP Web接口和无模式JSON文档。Elasticsearch是用Java开发的,并在Apache许可证下作为开源软件发布。官方客户端在Java、.NET(C#)、PHP、Py...
ES搜索引擎
qq_40728490的博客
05-02 2504
131414
ES(Elasticsearch 全文检索
不瘦25斤不改名
04-08 2168
对文档的内容进行分词,对词条创建索引,记录词条所在的文档信息根据词条查询到文档的id 从而查到文档。es是面向文档存储的可以是数据库中的一条商品数据订单信息,文档会被序列化为json后存储在es中。根据文档的id创建索引 查询词条必须先找到文档完了判断是否包含词条。删:DELETE /indexName/_doc/docId。增:POST /indexName/_doc/docId。差:GET /indexName/_doc/docId。es:擅长海量数据的搜索、分析、计算。
ES学习(三)全文查询[超多图预警]
changgongcheng_yq的博客
12-18 1335
3.1 _analyze 分析器 3.2 全文搜索 match 3.3 组合查询 3.4 聚集查询 四、SpringBoot集成 五、ELK+Skywalking
es中关于全文分词搜索/ 短语精确搜索 可参考
木子哇 的博客
11-24 656
短语搜索 | Elasticsearch: 权威指南 | Elastic 看看这个文档就都明白啦啦啦
全文搜索引擎 ElasticSearch 还是 Solr?
01-07
项目中用到了全文搜索,基于全文搜索 Solr,但是该 Solr 搜索云项目不稳定,经常查询不出来数据,需要手动全量同步,而且是其他团队在维护,依赖性太强,导致 Solr 服务一出问题,我们的项目也基本瘫痪,因为所有的...
Elasticsearch分片原理
01-07
ES集群的基本概念 Cluster 代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于...
elasticsearch索引流程
04-19
elasticsearch索引流程,以前的笔记,希望有用
超系统学习Lucene全文检索技术视频教程
03-21
视频详细讲解,需要的小伙伴自行网盘下载,链接见附件,永久有效。 目前业界流行的ElasticSearch和Solr搜索...系统的学习Lucene全文检索技术,全面掌握搜索原理和底层知识,为学习其他应用层面搜索技术打下坚实的基础。
Elasticsearch亿级数据检索性能优化案例实战!
01-27
数据平台已迭代三个版本,从头开始遇到很多常见的难题,终于有片段时间整理一些已完善的文档,在此分享以...谈到优化,必须能了解组件的基本原理,才容易找到瓶颈所在,以免走多种弯路,先从ES的基础结构说起(如下图):
ES常用命令
sun
04-25 146
启动: /etc/init.d/mysql start 停止: /usr/bin/mysqladmin -u root -p shutdown 重新启动: sudo/etc/init.d/mysqlrestart
Lucene全文检索框架+Solr+ElasticSearch搜索引擎(Java高级必备.ES)
09-30
课程提供所有代码笔记素材以及答疑 1、Lucene框架的熟练应用实现类似百度、京东商城等应用的全文检索效果; 1、Solr简介 2、Solr下载安装以及目录结构介绍 3、Solr应用部署至Tomcat服务器 4、Solr后台管理界面介绍 5、通过managed-schema配置Field以及中文分词器 6、将数据库中的数据导入至Solr索引库 7、通过Solr后台管理界面对索引进行CRUD高亮过滤排序分页 8、通过Solrj实现索引的添加更新 9、通过Solrj实现索引的删除 10、索引的检索_过滤_高亮等操作 11、项目实战应用 12、Solr知识点总结 1、熟练掌握Lucene框架的使用,实现类似百度、京东商城等应用的全文检索效果; 2、ElasticSearch下载安装(window以及linux下安装) 3、集群环境搭建 4、客户端Kibana安装与使用 5、集群管理插件head安装使用 6、java api 操作 ES 7、电商项目实战应用等等 .....
delphi报列表索引越界怎么处理_Elasticsearch如何做到快速检索,倒排索引的秘密
weixin_39669982的博客
11-28 441
"All problems in computer science can be solved by another level of indirection.”– David J. Wheeler“计算机世界就是 trade-off 得艺术”一、前言最近接触的几个项目都使用到了 Elasticsearch (以下简称 ES ) 来存储数据和对数据进行搜索分析,就对 ES 进行了一些学习。本文整理...
Elasticsearch全文检索:根据关键词对全文查询检索,关键词也分词处理
tonglei111的博客
11-21 1万+
之前看过了solr的全文检索工具,原理比较简单,理解起来也快;这次我们项目上要求用Elasticsearch实现全文检索,据说这个插件功能更厉害,但是也没有具体研究过;这里就省略了es的部署过程和集成springboot的方法了,直接附上我的后台查询代码; import com.pridecn.file.domain.EsFileInfo; import com.pridecn.file.s...
php array_search(),phparray_search()函数的使用详解
weixin_42393621的博客
03-19 452
array_search()函数是PHP的一个内置函数,用于在数组中搜索特定的值,如果找到该值,它将返回相应的键。如果有多个值,则返回第一个匹配值的键。语法:array_search($value, $array, strict_parameter)参数:这个函数有三个参数,如下所示:$value (必需):引用需要在数组中搜索的值。$array(必填):引用需要搜索的原始数组。strict_pa...
elasticsearch基本原理
08-24
Elasticsearch是一个分布式搜索和分析引擎,基于Apache Lucene库构建而成。它使用倒排索引来实现快速的全文搜索功能,并且可以进行高级的数据分析。 其基本原理如下: 1. 数据存储:Elasticsearch使用分片和副本的方式来存储数据。数据被分成多个分片,每个分片可以在集群的不同节点上存储。分片可以水平扩展,并且副本可以提供冗余和故障恢复。 2. 倒排索引:Elasticsearch使用倒排索引来加速搜索。倒排索引是一个将文档中的每个词与包含该词的文档进行映射的数据结构。通过对倒排索引进行搜索,可以快速找到包含特定词语的文档。 3. 分布式搜索:当用户发送一个查询请求时,Elasticsearch会将查询请求发送给所有相关的分片。每个分片在本地执行查询,并返回部分结果。然后,这些结果会被合并并返回给用户。 4. 实时性:Elasticsearch支持实时索引和搜索。这意味着当文档被索引后,它们可以立即被搜索到,而不需要等待索引的刷新。 5. RESTful API:Elasticsearch提供了一个基于RESTful的API,可以通过HTTP请求进行数据的索引、搜索和修改。这使得与Elasticsearch的集成非常简单。 总体而言,Elasticsearch基本原理是通过分布式存储和倒排索引来实现高效的全文搜索和数据分析功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • K8S 快速入门(十六)实战篇:StorageClass(存储类) 28257
  • JVM原理(一)JVM通识、JVM架构 18013
  • K8S 快速入门(十五)实战篇:Headless Services、StatefulSet 部署有状态服务 11487
  • K8S 快速入门(五)网络通信原理:Pod网络(上) 6976
  • Mysql安装【YUM方式】 5933

分类专栏

  • 编程思维
  • 数据结构与算法 10篇
  • 设计模式 2篇
  • 计算机基础
  • 操作系统 2篇
  • 网络 3篇
  • 数据库
  • Mysql 2篇
  • MongoDB
  • JAVA
  • JVM 3篇
  • JAVA并发编程 20篇
  • JDK源码 1篇
  • Java Web 1篇
  • 框架
  • XML 5篇
  • Spring 18篇
  • MyBatis 6篇
  • Spring MVC
  • Spring Boot 16篇
  • 分布式
  • Redis 6篇
  • Netty 13篇
  • ZooKeeper 8篇
  • RabbitMQ
  • Kafka 3篇
  • RocketMQ 7篇
  • Elasticsearch 7篇
  • Dubbo 19篇
  • Nginx
  • ShardingSphere 1篇
  • Mycat 1篇
  • 微服务
  • Spring Cloud Netflix 26篇
  • Spring Cloud Alibaba
  • DevOps 3篇
  • Docker
  • K8S 19篇
  • 工作流引擎 1篇
  • 模板引擎 1篇
  • 疑难杂症 2篇
  • 待定2
  • 待定3
  • 待定4
  • 待定5
  • 待定6
  • 待定7
  • 待定8

最新评论

  • Spring Cloud 快速入门(四)Hystrix Dashboard 监控仪表盘、Turbine 聚合监控、服务降级报警机制

    春卷-huachun: 写的很好,但是漏掉了一点 hystrix: dashboard: proxy-stream-allow-list: 因为没有正确配置这个参数访问域名,在这里停留了一天

  • Spring源码分析(十六)循环依赖3:其他场景下循环依赖分析,以及神器@Lazy懒加载解决循环依赖

    XBGzZ1: 2. 根据顺序判断到底谁发生了循环依赖,这个地方,不太对吧,我用spring 2.7.x 的代码测试了,不管加给谁,都是产生了循环依赖,也就是和顺序无关

  • K8S 快速入门(十六)实战篇:StorageClass(存储类)

    树荫下的停留: 对于搞懂stC和provisioner很有帮助的文章! 最后sts测试哪里貌似少写了selector部分

  • Spring Cloud Eureka Server 源码解析(六)处理客户端全量下载请求

    宇航员star: 补充下文中提到的(Server端什么时候从远程region下载的,暂时不清楚):Server端对于server-config里配置的Region-serverUrls,挨个创建RemoteRegionRegistry实例,然后在其构造器里启动一个定时拉取远程注册表信息的任务。

  • idea UML类图不能使用鼠标右键弹出菜单

    Einslsp: 服了,今天也是看源码的时候,突然右键就没有这个显示图的选项了

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • Spring源码分析(十六)循环依赖3:其他场景下循环依赖分析,以及神器@Lazy懒加载解决循环依赖
  • Spring源码分析(十五)循环依赖2:源码分析
  • Spring源码分析(十四)循环依赖1:思路分析
2022年19篇
2021年32篇
2020年155篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

犬豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司鞍山网站排名优化推荐迪庆推广网站价格天门外贸网站设计哪家好昌都网站seo优化通化企业网站建设推荐铜陵seo网站推广金昌网站建设推荐滁州网站推广工具价格和田建网站哪家好丽水网页设计报价湛江营销网站报价西安百度关键词包年推广报价昆明SEO按天收费南京关键词按天计费价格阳泉企业网站制作哪家好丽江网页设计多少钱阜新营销网站多少钱常德关键词排名推荐北京seo网站推广武威关键词按天收费哪家好海东网站设计模板公司木棉湾网站排名优化公司丽江网站改版临汾外贸网站制作价格许昌至尊标王哪家好邯郸百度竞价包年推广推荐昌吉关键词按天扣费推荐深圳百搜标王报价临猗百度爱采购报价内江网站改版价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化