lucene

Elasticsearch索引的增删改查原理

拟墨画扇 提交于 2020-03-21 16:39:26
3 月,跳不动了?>>> 1. Elasticsearch的index Elasticsearch的索引(index)是用于组织数据的 逻辑命名空间 (如数据库)。Elasticsearch的索引 有一个或多个分片(shard) (默认为5)。 分片是实际存储数据的Lucene索引,它本身就是一个搜索引擎 。每个分片可以有零个或多个副本(replicas)(默认为1)。Elasticsearch索引还具有“类型(type)”(如数据库中的表),允许 在索引中对数据进行逻辑分区 。Elasticsearch索引中给定“类型(type)”中的所有文档(documents)具有相同的属性(如表的模式)。 前者显示了一个由三个主分片组成的Elasticsearch集群,每个主分片分别有一个副本。所有这些分片一起形成一个Elasticsearch索引,每个分片是Lucene索引本身。 后者演示了Elasticsearch索引,分片,Lucene索引和文档(document)之间的逻辑关系。 2. 新建索引操作实现原理 当向协调节点发送请求以 索引新文档 时,将执行以下操作: 所有在Elasticsearch集群中的节点都包含: 有关哪个分片存在于哪个节点上的元数据 。协调节点(coordinating node)使用 document_id (默认)将文档路由到对应的分片。 shard =

ElasticSearch 学习-笔记

末鹿安然 提交于 2020-03-21 16:39:09
3 月,跳不动了?>>> Lucene 工作原理 处理文本的最高效做法就是:正则匹配。 ElasticSearch 中的基本概念 索引: 含有相同属性的文档集合。 类型:索引可以定义一个或多个类型,文档必须属于一个类型。 文档:文档是可以被索引的基本数据单元。 分片:每个索引都有多个分片,每个分片是一个Lucene 索引。 备份:拷贝一份分片就完成了分片的备份。 ElasticSearch API 命名风格 API 基本格式: http://<ip>:<port>/<索引>/<类型>/<文档ID> 常用的HTTP 动词:GET/PUT/POST/DELETE 关系型数据库和ElasticSearch 操作姿势对比 ElasticSearch 基本操作 创建索引 方式一:创建非结构化的索引(如下图所示)。 方式二:创建结构化的索引,输入book/novel/_mappings(如下图所示), 方式三:可以在Postman 中选择PUT 方法,输入localhost:9200/people,然后在raw 中编辑一下json 信息(如下图): 输入的json 内容如下: { "settings":{ "number_of_shards":3, "number_of_replicas":1 }, "mappings":{ "man":{ "properties":{ "name":{

Lucene查询语法汇总

随声附和 提交于 2020-03-16 07:43:31
目录 一、单词查询 二、通配符查询 三、模糊查询 四、近似查询 五、范围查询 六、优先级查询 七、逻辑操作 八、括号分组 九、转义特殊字符 Lucene是目前最为流行的开源全文搜索引擎工具包,提供了完整的查询引擎和索引引擎,部分文本分析引擎。 我们平时使用kibana、阿里云的日志查询或者其他一些lucene二次开发的产品,几乎都支持lucene语法。 下面给大家演示各种查询方式,更多请参考 Apache Lucene - Query Parser Syntax 一、单词查询 直接使用单词,例如 chenqionghe 多个单词,可以用逗号或者空格隔开,例如 chenqionghe,活动 可以指定 字段:空格 来查询,例如 page: 18 、 content:"sport" 二、通配符查询 ?匹配单个字符 *匹配0或多个字符 例如 muscle? 能匹配到muscles 搜索 hi*er 搜索 *er 三、模糊查询 ~ :在一个单词后面加上~启用模糊搜索,可以搜到一些拼写错误的单词 例如 first~ 能匹配到错误的单词frist 可以在~后面添加模糊系数,例如 first~0.8 ,模糊系数[0-1],越靠近1表示越相近,默认模糊系数为0.5。 四、近似查询 在短语后面加上 ~ ,可以搜到被隔开或顺序不同的单词 "life movement"~2

Lucene学习之四:Lucene的索引文件格式(1)

♀尐吖头ヾ 提交于 2020-03-15 08:35:50
本文转载自: http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623597.html Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙。 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程,就是按照全文检索的基本过程,将倒排表写成此文件格式的过程。 Lucene的搜索过程,就是按照此文件格式将索引进去的信息读出来,然后计算每篇文档打分(score)的过程。 本文详细解读了Apache Lucene - Index File Formats( http://lucene.apache.org/java/2_9_0/fileformats.html ) 这篇文章。 一、基本概念 下图就是Lucene生成的索引的一个实例: Lucene的索引结构是有层次结构的,主要分以下几个层次: 索引(Index): 在Lucene中一个索引是放在一个文件夹中的。 如上图,同一文件夹中的所有的文件构成一个Lucene索引。 段(Segment): 一个索引可以包含多个段,段与段之间是独立的,添加新文档可以生成新的段,不同的段可以合并。 如上图,具有相同前缀文件的属同一个段,图中共两个段 "_0" 和 "_1"。 segments

lucene索引

[亡魂溺海] 提交于 2020-03-15 08:19:27
一、lucene索引 1、文档层次结构 索引(Index):一个索引放在一个文件夹中; 段(Segment):一个索引中可以有很多段,段与段之间是独立的,添加新的文档可能产生新段,不同的段可以合并成一个新段; 文档(Document):文档是创建索引的基本单位,不同的文档保存在不同的段中,一个段可以包含多个文档; 域(Field):一个文档包含不同类型的信息,可以拆分开索引; 词(Term):词是索引的最小单位,是经过词法分析和语言处理后的数据;   文档是Lucene索引和搜索的原子单位,文档为包含一个或多个域的容器,而域则依次包含“真正的”被搜索内容,域值通过分词技术处理,得到多个词元。如一篇小说信息可以称为一个文档;小说信息又包含多个域,比如标题,作者、简介、最后更新时间等;对标题这一个域采用分词技术,又可以等到一个或多个词元。 2、正向索引与反向索引 正向索引:文档占据了中心的位置,每个文档指向了一个它所包含的索引项的序列。正向信息就是按层次保存了索引一直到词的包含关系: 索引 -> 段-> 文档 -> 域 -> 词 反向索引:一种以索引项为中心来组织文档的方式,每个索引项指向一个文档序列,这个序列中的文档都包含该索引项。反向信息保存了词典的倒排表映射:词 -> 文档   lucene使用到的就是反向索引。如下图所示: 二、索引操作   相关示例如下: 1 package

lucene文件格式待整理

浪子不回头ぞ 提交于 2020-03-15 08:17:42
这是之前Lucene3.0生成的索引格式 a表 b表 、 c.这是网上找的图片(因为上面的两张表的segment都是合并了的) lucene4.9 建立的索引: 索引(Index): 在Lucene中一个索引是放在一个文件夹中的。 如上图,同一文件夹中的所有的文件构成一个Lucene索引。 段(Segment): 一个索引可以包含多个段,段与段之间是独立的,添加新文档可以生成新的段,不同的段可以合并。 如上图,具有相同前缀文件的属同一个段,图中共两个段 "_0" 和 "_1"。 segments.gen和segments_5是段的元数据文件,也即它们保存了段的属性信息。 文档(Document): 文档是我们建索引的基本单位,不同的文档是保存在不同的段中的,一个段可以包含多篇文档。 新添加的文档是单独保存在一个新生成的段中,随着段的合并,不同的文档合并到同一个段中。 域(Field): 一篇文档包含不同类型的信息,可以分开索引,比如标题,时间,正文,作者等,都可以保存在不同的域里。 不同域的索引方式可以不同,在真正解析域的存储的时候,我们会详细解读。 词(Term): 词是索引的最小单位,是经过词法分析和语言处理后的字符串。 Segment info . This contains metadata about a segment, such as the number of

第一章:elasticsearch介绍

强颜欢笑 提交于 2020-03-13 23:50:08
公司技术更新换代,考虑了各种因素吧,最后选了es,没有选最高版本,选了6.8,后面相关内容章节版本都是基于6.8版本来记录的,深度算是入门吧,望路过众神多批评,指正。 1.es我能用来干什么? 太多了,但是不想呼呼吹一堆牛逼,还是切合自身实际遇到的业务场景来说吧,一切脱离了实际业务场景来谈技术都是耍流氓,基本用到了三个方面分别是: 1.做了电商平台的全文检索 2.一些业务生产数据汇集到es后,做了很多聚合运算。 3.线上生产日志汇集到es后,做了相关数据分析,说白了还是个聚合运算,只是分了一下业务逻辑。 目前公司项目里面主要是用到了这三块。 2.搜了一堆es的资料,发现es底层基于lucene的,那还需要不需要去看lucene的知识体系? 网上一搜,太多了,简直了,大部分都会找出跟lucene的对比,跟solr的对比,成堆成堆的出现,,想了解对比的随便就能去看, 个人感觉lucene的一些原理知识还是很有必要去找找看看了解一下的,因为后面对于es的一些读写索引数据交换等的原理层面你才能够理解,能衔接的上,因为说到底底层还是lucene的一些东西。 3.写在前面 疫情原因,真是闲出屁了,本人中专生毕业,实在无法提升自己的语言能力,用很官方的话来写东西,只能大白话把一些费时间的问题写明白,关于es的本类文章打算坚持不定期更新完毕,主要是基于es一些应用思想理论理解层面的

ElasticSearch和solr的对比

冷暖自知 提交于 2020-03-09 06:30:32
关于ES :ElasticSearch是一个事实分布式搜索和分析引擎,使用其可以以前所未有的速度处理大数据,他用于全文搜索、结构化搜索、分析以及将这三者混合使用。维基百科使用ElasticSearch提供全文搜索并高亮关键字,以及输入实时搜索(search+asyou+type)等搜索纠错(did+you+mean)等搜索建议功能。ElasticSearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是在专有领域,Lucene可以被认为是迄今最先进、性能最好的、功能最全的搜索引擎库。 关于Solr :solr是Apache下的一个顶级开源项目,采用java开发,它是基于Lucene的全文搜索服务器。solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展、并对索引、搜索性能进行了优化。solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,solr索引是实现方法很简单,用post方法向solr服务器发送一个描述Field及其内容的xml文档,solr根据xml文档添加、删除、更新索引。 二者之间对比: 相同点: 都是基于Lucene,都是对Lucene的封装 不同点: 使用 Solr安装略微复杂一些,es基本的开箱急用,非常简单 接口 Solr类似webservice的接口;es是基于restful风格的访问接口

传智播客课程——Lucene搜索引擎

孤街浪徒 提交于 2020-03-06 09:35:08
Lucene不是一个现成的程序,类似文件搜索程序或web网络爬行器或是一个网站的搜索引擎。Lucene是一个软件库,一个开发工具包,而不是一个具有完整特征的搜索应用程序。它本身只关注文本的索引和搜索。Lucene使你可以为你的应用程序添加索引和搜索能力。目前已经有很多应用程序的搜索功能是基于 Lucene 的,比如 Eclipse 的帮助系统的搜索功能。 Lucene 采用的是一种称为反向索引(inverted index)的机制。反向索引就是说我们维护了一个词/短语表,对于这个表中的每个词/短语,都有一个链表描述了有哪些文档包含了这个词/短语。这样在用户输入查询条件的时候,就能非常快的得到搜索结果。 文档建立好索引后,就可以在这些索引上面进行搜索了。搜索引擎首先会对搜索的关键词进行解析,然后再在建立好的索引上面进行查找,最终返回和用户输入的关键词相关联的文档。 今天在传智播客的课堂上,汤阳光老师教我们实现了简单的Lucene搜索引擎,使我们能够对大量的文档实现不同需求的查找。以下是我的总结。 1. 准备环境:添加jar包 lucene-core-2.4.0.jar(核心); lucene-analyzers-2.4.0.jar(分词器); lucene-highlighter-2.4.0.jar(高亮器); 2. 构造IndexWriter

Lucene系列四:Lucene提供的分词器、IKAnalyze中文分词器集成、扩展 IKAnalyzer的停用词和新词

こ雲淡風輕ζ 提交于 2020-03-05 07:01:32
一、Lucene提供的分词器StandardAnalyzer和SmartChineseAnalyzer 1.新建一个测试Lucene提供的分词器的maven项目LuceneAnalyzer 2. 在pom.xml里面引入如下依赖 <!-- lucene 核心模块 --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>7.3.0</version> </dependency> <!-- Lucene提供的中文分词器模块,lucene-analyzers-smartcn:Lucene 的中文分词器 SmartChineseAnalyzer --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-analyzers-smartcn</artifactId> <version>7.3.0</version> </dependency> 3. 新建一个标准分词器StandardAnalyzer的测试类LuceneStandardAnalyzerTest package com.luceneanalyzer.use.standardanalyzer;