Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎,它容许你快速,近实时地存储,搜索和分析大量数据,它一般用做底层引擎/技术,为具备复杂搜索功能和要求的应用程序提供支持。node
Elasticsearch既简单又复杂,到目前为止,咱们已经了解了它的基础知识,如何查看它,以及如何使用一些REST API来使用它,但愿本教程能让你更好地了解Elasticsearch的内容,更重要的是,启发你进一步尝试其他的强大功能!segmentfault
本节包含有关如何设置Elasticsearch并使其运行的信息,包括:下载,安装,启动,配置。缓存
官方支持的操做系统和JVM矩阵可在此处得到:支持矩阵,Elasticsearch在列出的平台上进行了测试,但它也可能在其余平台上运行。安全
Elasticsearch经过HTTP使用JSON公开REST API。app
除非另有说明,本章列出的约定能够在整个REST API中应用。elasticsearch
许多用户使用基于url的访问控制的代理来安全访问Elasticsearch索引,对于多搜索、多获取和批量请求,用户能够选择在URL中以及在请求体中的每一个请求上指定索引,这可能使基于url的访问控制具备挑战性。函数
为了防止用户覆盖URL中指定的索引,将此设置添加到elasticsearch.yml
文件中:测试
rest.action.multi.allow_explicit_index: false
默认值为true
,但当设置为false
时,Elasticsearch将拒绝在请求体中指定的显式索引的请求。url
本节首先简要介绍Elasticsearch的数据复制模型,而后详细介绍如下CRUD API。
全部CRUD API都是单索引API,
index
参数接受单个索引名,或指向单个索引的别名。
这个系列中的聚合基于以某种方式从正在聚合的文档中提取的值计算指标,这些值一般从文档的字段中提取(使用字段数据),但也可使用脚本生成。
数值指标聚合是输出数值的一种特殊类型的指标聚合,一些聚合输出单个数值指标(例如avg
),称为single-value numeric metrics aggregation
,另外一些聚合生成多个指标(例如stats
),称为multi-value numeric metrics aggregation
,当这些聚合充当一些桶聚合的直接子聚合时,单值和多值数字指标聚合之间的区别就发挥了做用(一些桶聚合使你可以根据每一个桶中的数字指标对返回的桶进行排序)。
桶聚合不像指标聚合那样在字段上计算指标,而是建立文档桶,每一个桶都与一个标准相关联(取决于聚合类型),这决定当前上下文中的文档是否“落入”它,换句话说,桶有效地定义了文档集,除了桶自己以外,bucket
聚合还计算并返回“落入”每一个桶中的文档数量。
与metrics
聚合相反,桶聚合能够包含子聚合,这些子聚合将聚合它们的“父”桶聚合建立的桶。
有不一样的桶聚合器,每一个聚合器都有不一样的“bucketing”策略,一些定义单个桶,一些定义固定数量的多个桶,还有一些在聚合过程当中动态建立桶。
单个响应中容许的最大桶数受到名为search.max_buckets
的动态集群设置的限制,默认状况下它是禁用的(-1
),可是试图返回超过10,000个桶(将来版本的默认值)的请求将记录一个弃用警告。
管道聚合
索引API用于管理各个索引,索引设置,别名,映射和索引模板。
Elasticsearch提供基于JSON的完整的查询DSL(领域特定语言)来定义查询,将查询DSL看做查询的AST(抽象语法树),由两种类型的子句组成:
叶查询子句 - 叶查询子句查找特定字段中的特定值,例如match
、term
或range
查询,这些查询能够被它本身使用。
复合查询子句 - 复合查询子句包装其余叶子或复合查询,并用于以逻辑方式组合多个查询(如bool
或dis_max
查询),或更改其行为(如constant_score
查询)。
查询子句的行为取决于它们是用于查询上下文仍是过滤器上下文。