2019-11-12

有哪些大厂商在使用elasticsearch?


1. 维基百科使用Elasticsearch提供全文搜索并高亮关键字,以及输入实时搜索(search-as-you-type)和搜索纠错(did-youmean)

等搜索建议功能。

2. 英国卫报使用Elasticsearch结合用户日志和社交网络数据提供给他们的编辑以实时的反馈,以便及时了解公众对新发表

的文章的回应

3. StackOverflow结合全文搜索与地理位置查询,以及more-like-this功能来找到相关的问题和答案。

4. Github使用Elasticsearch检索1300亿行的代码。


为了搜索


Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最

先进、性能最好的、功能最全的搜索引擎库。


安装监控工具marvel


安装方法:todo


集群和节点


节点(node)是一个运行着的Elasticsearch实例

集群(cluster)是一组具有相同 cluster.name 的节点集合


和传统关系型数据库概念对比


Relational DB -> Databases -> Tables -> Rows -> Columns

Elasticsearch -> Indices -> Types -> Documents -> Fields

查询操作:

查询、过滤、全文搜索、短语搜索、高亮、相关性评分、分析(聚合)


集群健康状态


green 所有主要分片和复制分片都可用

yellow 所有主要分片可用,但不是所有复制分片都可用

red 不是所有的主要分片都可用


分片概念


分片就是一个Lucene实例。节点、主分片(一开始就确定)、复制分片

默认情况下,一个索引被分配5个主分片、


ES集群命令


查看集群状态:curl 'http://127.0.0.1:9200/_cluster/health?pretty'

更多命令:todo



版本控制


外部版本号与之前说的内部版本号在处理的时候有些不同。它不再检查当前最新的 _version 是否与请求中指定的一致,而是检查是否小

于指定的版本。如果请求成功,外部版本号就会被存储到 _version 中。


ES脚本


Groovy


检索多个文档


mget


批量操作


mget 允许我们一次性检索多个文档一样, bulk API允许我们使用单一请求来实现多个文档

POST /_bulk

{ "delete": { "_index": "website", "_type": "blog", "_id": "123" }}

{ "create": { "_index": "website", "_type": "blog", "_id": "123" }}

{ "title": "My first blog post" }

{ "index": { "_index": "website", "_type": "blog" }}

{ "title": "My second blog post" }

{ "update": { "_index": "website", "_type": "blog", "_id": "123", "_retry_on_conflict" : 3} }

{ "doc" : {"title" : "My updated blog post"} }

整个批量请求需要被加载到接受我们请求节点的内存里,所以请求越大,给其它请求可用的内存就越小。有一个最佳

的 bulk 请求大小。超过这个大小,性能不再提升而且可能降低。

最佳大小,当然并不是一个固定的数字。它完全取决于你的硬件、你文档的大小和复杂度以及索引和搜索的负载。幸运的

是,这个最佳点(sweetspot)还是容易找到的:

试着批量索引标准的文档,随着大小的增长,当性能开始降低,说明你每个批次的大小太大了。开始的数量可以在

1000~5000个文档之间,如果你的文档非常大,可以使用较小的批次。

通常着眼于你请求批次的物理大小是非常有用的。一千个1kB的文档和一千个1MB的文档大不相同。一个好的批次最好保持

在5-15MB大小间。

你可能感兴趣的:(2019-11-12)