Elasticsearch
文章平均质量分 90
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。
@SmartSi
Stay Hungry, Stay Foolish
展开
-
ElasticSearch 动态更新索引
通过增加一个新的补充索引来反映最近的修改,而不是直接重写整个倒排索引。每一个倒排索引都会被轮流查询--从最旧的开始--再对各个索引的查询结果进行合并。翻译 2022-11-05 16:39:15 · 1175 阅读 · 0 评论 -
ElasticSearch 段合并
由于自动刷新过程每秒会创建一个新的段,这样会导致短时间内段数量暴增。段数目太多会带来比较大的麻烦。每一个段都会消耗文件句柄、内存和 CPU 运行周期。更重要的是,每个搜索请求都必须按顺序检查每个段。所以段越多,搜索也就越慢。Elasticsearch 通过在后台进行段合并来解决这个问题。小的段被合并成大的段,然后这些大的段会被合并成更大的段。段合并的时候将那些被标记为删除的旧文档从文件系统中删除。被标记删除的文档或者更新文档的旧版本文档不会被拷贝到新的更大的段中。翻译 2022-11-05 15:53:51 · 858 阅读 · 0 评论 -
ElasticSearch 分片
一个分片存在于单个节点,但一个节点可以拥有多个分片翻译 2022-11-04 23:06:13 · 568 阅读 · 0 评论 -
ElasticSearch Scroll 游标搜索
ElasticSearch版本:2.x。翻译 2022-11-04 22:50:11 · 569 阅读 · 0 评论 -
ElasticSearch 索引
我们首先要做的是存储员工数据,每个文档代表一个员工。在 Elasticsearch 中存储数据的行为就叫做索引(indexing),不过在索引之前,我们需要明确数据应该存储在哪里。Elasticsearch 集群可以包含多个 index(数据库),每一个 index 可以包含多个 types(表),每一个 type 又可以包含多个 document(行),然后每个 document 包含多个 field(列)。默认情况下,文档中的所有字段都会被索引(拥有一个倒排索引),只有这样他们才是可被搜索的。原创 2022-11-03 23:10:10 · 546 阅读 · 0 评论 -
ElasticSearch 内部原理之分布式文档搜索
ElasticSearch 版本: 2.x这个要比基本的创建-读取-更新-删除(CRUD)请求要难一些。CRUD操作是处理的单个文档。这就意味着我们明确的知道集群中的哪个分片存储我们想要的文档。一个 CRUD 操作只对单个文档进行处理,文档有唯一的组合,由_index,_type, 和 路由值 (默认是该文档的_id)组成。这表示我们确切的知道此文档在集群中哪个分片中。搜索请求是更复杂的执行模型,因为我们不知道哪些文档会与查询匹配,它们可能存在在集群中的任意一个分片中。原创 2022-11-02 23:52:42 · 523 阅读 · 0 评论 -
ElasticSearch 内部原理之分布式文档存储
之前的文章中,我们已经知道如何存储数据到索引中以及如何检索它。但是我们掩盖了数据存储到集群中以及从集群中获取数据的具体实现的技术细节。翻译 2022-11-01 23:03:03 · 147 阅读 · 0 评论 -
[ElasticSearch]精确值与全文文本
Elasticsearch中的数据可以大致分为两种类型:精确值和全文文本。1. 精确值(Exact values)精确值是精确的,正如它的名字一样。比如一个日期或一个用户ID,也可以包含精确的字符串,比如用户姓名或邮件地址。精确值"Foo"不同于和精确值"foo"。同样,精确值2014和精确值2014-09-15也不相同。2. 全文文本(Full text)翻译 2016-10-19 17:35:57 · 2652 阅读 · 0 评论 -
[ElasticSearch2.x]分析与分析器(Analyzer)
1. 分析过程分析(analysis)是这样一个过程:(1)首先,标记化一个文本块为适用于倒排索引单独的词(term)(2)然后标准化这些词为标准形式,提高它们的“可搜索性”或“查全率”这个工作是分析器(Analyzer)完成的。2. 分析器组成分析器(Analyzer) 一般由三部分构成,字符过滤器(Character Filters)、分翻译 2016-10-19 10:43:23 · 3836 阅读 · 0 评论 -
[ElasticSearch]分析之Analysis(分析)
分析(analysis)是将文本(如任何电子邮件的正文)转换为添加到倒排索引中进行搜索的tokens或terms的过程。 分析由分析器analyzer执行,分析器可以是内置分析器或者每个索引定制的自定义分析器。1. 索引时分析(Index time analysis)例如在索引时,内置的英文分析器将会转换下面句子:"The QUICK brown foxes jumped over the laz翻译 2017-05-22 20:26:56 · 3288 阅读 · 0 评论 -
[ElasticSearch]Term精确匹配中文字符串短语
1. 给定数据curl -XPUT 'localhost:9200/test-index/stu/1' -d'{ "name":"陈泽鹏", "sex":"boy", "college":"计算机学院"}';curl -XPUT 'localhost:9200/test-index/stu/2' -d'{ "name":"廖力生", "sex":"boy",原创 2016-07-06 20:46:38 · 17459 阅读 · 11 评论 -
[ElasticSearch]Java API之TermQuery
1. 词条查询(Term Query) 词条查询是ElasticSearch的一个简单查询。它仅匹配在给定字段中含有该词条的文档,而且是确切的、未经分析的词条。term 查询 会查找我们设定的准确值。term 查询本身很简单,它接受一个字段名和我们希望查找的值。下面代码查询将匹配 college 字段中含有"California"一词的文档。记住,词条查询是未经分析的,因此原创 2016-10-18 20:52:33 · 12596 阅读 · 3 评论 -
[Elasticsearch]Elasticsearch+kibana+marvel安装
1. 检查JDK版本使用如下命令检验JDK版本:xiaosi@Qunar:~$ java -versionjava version "1.7.0_40"Java(TM) SE Runtime Environment (build 1.7.0_40-b43)Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)原创 2016-06-23 23:04:03 · 9631 阅读 · 0 评论 -
[ElasticSearch]ElasticSearch,Kibana安装与启动
1. 检查JDK版本使用如下命令检验JDK版本:xiaosi@Qunar:~$ java -versionjava version "1.7.0_40"Java(TM) SE Runtime Environment (build 1.7.0_40-b43)Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)xiaosi原创 2017-10-16 10:36:53 · 1600 阅读 · 0 评论 -
ElasticSearch 分页搜索
之前的文章[ElasticSearch]搜索我们知道,我们的空搜索匹配到集群中的13个文档。 但是,命中数组中只有10个文档(文章只显示了2条数据,故意省略掉)。 我们如何查看其他文档呢?与SQL使用LIMIT关键字返回一个“页面”的结果数据相同,Elasticsearch接受from和size参数:size 表示应返回的结果数,默认为10from 表示应跳过的初始结果数,默认为0如果想每页显示五翻译 2017-05-19 20:08:49 · 4691 阅读 · 0 评论 -
ElasticSearch 空搜索与多索引多类型搜索
1. 空搜索测试数据:https://gist.github.com/clintongormley/85792811.1 搜索最基本的搜索API是空搜索(empty search),它没有指定任何的查询条件,只返回集群索引中的所有文档:curl -XGET 'localhost:9200/_search?pretty'Java版本:SearchRequestBuilder searchReques翻译 2017-05-19 19:30:11 · 1547 阅读 · 0 评论 -
[ElasticSearch]那些年踩过的ElasticSerch坑
1. 索引名称错误1.1 代码xiaosi@Qunar:~$ curl -XPUT 'localhost:9200/Quanr/employee/1' '> {> "first_name" : "John",> "last_name" : "Smith",> "age" : 25,> "about" : "I love to原创 2016-10-12 22:30:41 · 7614 阅读 · 1 评论 -
[ElasticSearch]Java API 之 索引文档 (Index API)
Index API 允许我们存储一个JSON格式的文档,使数据可以被搜索。文档通过index、type、id唯一确定。我们可以自己提供一个id,或者也使用IndexAPI 为我们自动生成一个。这里有几种不同的方式来产生JSON格式的文档(document):(1)手动方式,使用原生的byte[]或者String(2)使用Map方式,会自动转换成与之等价的JSON...原创 2016-10-13 13:25:25 · 7883 阅读 · 0 评论 -
[ElasticSearch]Java API 之 滚动搜索(Scroll API)
一般搜索请求都是返回一"页"数据,无论数据量多大都一起返回给用户,Scroll API可以允许我们检索大量数据(甚至全部数据)。Scroll API允许我们做一个初始阶段搜索并且持续批量从Elasticsearch里拉取结果直到没有结果剩下。这有点像传统数据库里的cursors(游标)。Scroll API的创建并不是为了实时的用户响应,而是为了处理大量的数据(Scrolling is...原创 2016-10-13 21:41:45 · 21495 阅读 · 5 评论 -
ElasticSearch 倒排索引
Elasticsearch使用一种叫做倒排索引(inverted index)的结构来做快速的全文搜索。倒排索引由在文档中出现的唯一的单词列表,以及对于每个单词在文档中的位置组成(An inverted index consists of a list of all the unique words that appear in any document, and for each word翻译 2016-10-19 11:38:39 · 2892 阅读 · 0 评论 -
[ElasticSearch2.x]Java API 之 索引管理
ElasticSearch为了便于处理索引管理(Indices administration)请求,提供了org.elasticsearch.client.IndicesAdminClient接口。通过如下代码从 Client 对象中获得这个接口的实现:IndicesAdminClient indicesAdminClient = client.admin().indices();原创 2016-10-11 20:33:29 · 9641 阅读 · 4 评论 -
[ElasticSearch2.x]Queries vs Filters
1. 查询与过滤Elasticsearch 使用的查询语言(DSL) 拥有一套查询组件(queries),这些组件可以以无限组合的方式进行搭配(mixed and matched)。这套组件可以在以下两种上下文中使用:过滤上下文(filtering context)和查询上下文(query context)。当在过滤上下文(filtering context)中使用 时,该查询被设置成一个“不评分...原创 2017-05-15 10:54:39 · 859 阅读 · 0 评论 -
ElasticSearch 副本分片
1. 副本分片到目前为止,我们只讨论了主分片,但是我们还有另一个工具:副本分片。 副本分片的主要目的是为了故障转移(failover),如深入集群生命周期所述:如果持有主分片的节点死亡,则将其副本提升为主分片的角色。在索引写入时,副本分片做着与主分片相同的工作。新文档首先被索引进主分片然后再同步到其它所有的副本分片。增加副本数并不会增加索引容量。但是,副本分片可以为读取请求提供帮助。 如果通常情况翻译 2017-05-10 09:58:56 · 1212 阅读 · 0 评论 -
[ElasticSearch2.x]嵌套对象
考虑到在Elasticsearch中创建,删除和更新的单个文档是原子操作的,因此在相同文档中存储紧密相关的实体是有意义的。 例如,我们可以在一个文档中存储一个订单和其所有的订单线(order lines),或者我们可以通过传递一组评论来将一篇博客文章及其所有评论存储在一起:PUT /my_index/blogpost/1{ "title": "Nest eggs", "body": "翻译 2017-05-25 11:24:29 · 853 阅读 · 0 评论 -
[ElasticSearch]嵌套对象之嵌套类型
nested类型是一种特殊的对象object数据类型(specialised version of the object datatype ),允许对象数组彼此独立地进行索引和查询。1. 对象数组如何扁平化内部对象object字段的数组不能像我们所期望的那样工作。 Lucene没有内部对象的概念,所以Elasticsearch将对象层次结构扁平化为一个字段名称和值的简单列表。 例如,以下文件:cu翻译 2017-05-25 19:53:00 · 8821 阅读 · 1 评论 -
[ElasticSearch2.x]Filter之Cache
过滤器(Filter)的核心实际是采用一个bitset记录与过滤器匹配的文档。当Elasticsearch确定一个bitset可能会在将来被重用时,它将被直接缓存在内存中供以后使用。一旦缓存,这些bitset可以在使用相同查询的任何地方重复使用,而无需再次重新评估整个查询。这些缓存的bitset是非常“机智”的:它们是增量更新的。 在索引新文档时,只需要将那些新文档添加到现有的bitset中,而不翻译 2017-05-17 10:18:14 · 1401 阅读 · 1 评论 -
[ElasticSearch]原理之分布式文档存储(Distributed Document Store)
之前的文章中,我们已经知道如何存储数据到索引中以及如何检索它。但是我们掩盖了数据存储到集群中以及从集群中获取数据的具体实现的技术细节(But we glossed over many technical details surrounding how the data is distributed and fetched from the cluster)。1. 路由文档到分片中(Rout翻译 2016-10-24 21:00:41 · 2131 阅读 · 0 评论 -
[ElasticSearch2.x]原理之分布式搜索
这个要比基本的创建-读取-更新-删除(CRUD)请求要难一些。CRUD操作是处理的单个文档。这就意味着我们明确的知道集群中的哪个分片存储我们想要的文档。一个 CRUD 操作只对单个文档进行处理,文档有唯一的组合,由 _index, _type, 和 路由值 (默认是该文档的 _id )组成。 这表示我们确切的知道此文档在集群中哪个分片中。搜索请求是更复杂的执行模型,因为我们不知道哪些文档会与查询匹翻译 2017-05-27 15:26:29 · 578 阅读 · 0 评论 -
[ElasticSearch2.x]映射(Mapping)
为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成全文本(Full-text)或精确(Exact-value)的字符串值,Elasticsearch需要知道每个字段里面都包含什么数据类型。这些类型和字段的信息存储在映射(mapping)中。索引中的每个文档都有一个类型(type)。 每个类型拥有自己的映射(mapping)或者模式定义(schema definition翻译 2016-10-19 16:42:52 · 5736 阅读 · 0 评论 -
[ElasticSearch2.x]Filter之Filter原理
1. FilterBuilders废弃org.elasticsearch.index.queries.FilterBuilders从ElasticSearch2.0开始已被删除,作为查询和过滤器组合的一部分。 这些过滤器现在可以在QueryBuilders中使用具有相同名称的方法。所有可以接受FilterBuilder的方法现在也可以接受QueryBuilder。以前使用方式:FilterBuil翻译 2017-05-17 10:16:13 · 3024 阅读 · 1 评论 -
[ElasticSearch]ElasticSearch插件之Head
1. 安装1.1 不同版本安装方式不同(1)Elasticsearch 5.x:site plugins are not supported. Run elasticsearch-head as a standalone server(2)Elasticsearch 2.x – 4.x:sudo elasticsearch/bin/plugin ins原创 2016-10-11 09:43:23 · 2734 阅读 · 0 评论