参考网址
elasticsearch权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
elasticsearch-sql:https://github.com/NLPchina/elasticsearch-sql
ElasticSearch查询:http://www.cnblogs.com/ljhdo/p/4551490.html
ElasticSearch multifields说明:https://stackoverflow.com/questions/40271980/elasticsearch-multi-field-with-raw-value-not-being-created
23种非常有用的ElasticSearch查询例子:https://www.iteblog.com/archives/1741.html
推荐书籍
Elasticsearch服务器开发:https://item.jd.com/11615450.html
数据同步插件
待补充
index和type的概念
http://www.bayescafe.com/database/elasticsearch-using-index-or-type.html
mapping概念介绍
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html
ES和mysql概念对比
一个ES集群可以包含多个索引(数据库),每个索引又包含了很多类型(表),类型中包含了很多文档(行),每个文档又包含了很多字段(列)。
传统数据库为特定列增加一个索引,例如B-Tree索引来加速检索。Elasticsearch和Lucene使用一种叫做倒排索引(inverted index)的数据结构来达到相同目的。
倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。
关于全文查询和词条查询的说明
尽管所有的查询都会执行某种程度的相关度计算,并不是所有的查询都存在解析阶段。除了诸如bool或者function_score这类完全不对文本进行操作的特殊查询外,对于文本的查询可以被划分两个种类:
基于词条的查询(Term-based Queries)
类似term和fuzzy的查询是不含有解析阶段的低级查询(Low-level Queries)。它们在单一词条上进行操作。一个针对词条Foo的term查询会在倒排索引中寻找该词条的精确匹配(Exact term),然后对每一份含有该词条的文档通过TF/IDF进行相关度_score的计算。
尤其需要记住的是term查询只会在倒排索引中寻找该词条的精确匹配 - 它不会匹配诸如foo或者FOO这样的变体。它不在意词条是如何被保存到索引中。如果你索引了["Foo", "Bar"]到一个not_analyzed字段中,或者将Foo Bar索引到一个使用whitespace解析器的解析字段(Analyzed Field)中,它们都会在倒排索引中得到两个词条:"Foo"以及"Bar"。
全文查询(Full-text Queries)
类似match或者query_string这样的查询是高级查询(High-level Queries),它们能够理解一个字段的映射:
如果你使用它们去查询一个date或者integer字段,它们会将查询字符串分别当做日期或者整型数。
如果你查询一个精确值(not_analyzed)字符串字段,它们会将整个查询字符串当做一个单独的词条。
但是如果你查询了一个全文字段(analyzed),它们会首先将查询字符串传入到合适的解析器,用来得到需要查询的词条列表。
一旦查询得到了一个词条列表,它就会使用列表中的每个词条来执行合适的低级查询,然后将得到的结果进行合并,最终产生每份文档的相关度分值。