入门
简写 | 全称 | 释意 | 备注 |
---|---|---|---|
JSON | JavaScript Object Notation | Javascript对象符号 | — |
DSL | Domain Specific Language | 特定领域语言 | — |
- 天生支持分布式(大量非关键数据的存储首先考虑ES)
- Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。
- ELasticsearch使用 JSON 作为文档序列化格式
- 在Elasticsearch中存储数据的行为就叫做索引(indexing)
Relational DB -> Databases -> Tables -> Rows -> Columns 索引(index) Elasticsearch -> 索引Indices -> Types -> Documents -> Fields 倒排索引(inverted index) - 默认情况下,文档中的所有字段都会被索引(拥有一个倒排索引),只有这样他们才是可被搜索的。
- 建立或更新索引 :PUT /index_name/type_name/ID JSON
- 检查文档是否存在 :HEAD /index_name/type_name/ID
- 删除文档 :DELETE /index_name/type_name/ID
- 检索文档 :GET /index_name/type_name/ID 返回的JSON文档在 _source 字段中
- 搜索全部 :GET /index_name/type_name/_search
- query查询 :GET /index_name/type_name/_search?q=last_name:Smith
- DSL语句查询 :GET /index_name/type_name/_search JSON
GET /index_name/type_name/_search
{ "query" : { "match" : { "last_name" : "Smith" } } }
- 匹配类型:match、过滤器filter、短语查询match_phrase、高亮highlight
- 聚合(aggregations)aggs 类似于SQL的GROUP BY
- 美化:在任意的查询字符串中增加pretty参数,除 _source 外,其他字段都会被美化
GET /index_name/type_name/_search?pretty
{ "_index" : "website", "_type" : "blog", "_id" : "123", "_version" : 1, "found" : true, // 数据是否存在 "_source" : { "title": "My first blog entry", "text": "Just trying this out...", "date": "2014/01/01" } }
- 指定查询字段 _source , 返回值的 _source 只返回指定的字段
GET /index_name/type_name/_search?source=title,text
- 只想得到 _source 字段而不要其他的元数据
GET /index_name/type_name/_source
- _all 查询
GET /index_name/type_name/_search?q=搜素关键词
- 是否超时——Elasticsearch将返回在请求超时前收集到的结果。
GET /_search?timeout=10ms ```danger 需要注意的是timeout不会停止执行查询,它仅仅告诉你目前顺利返回结果的节点然后关闭连接。
在后台,其他分片可能依旧执行查询,尽管结果已经被发送。
* 分页, from(跳过数)、 size(结果数) <= 1000
```danger
应该当心分页太深或者一次请求太多的结果。结果在返回前会被排序。
但是记住一个搜索请求常常涉及多个分片。
每个分片生成自己排好序的结果,它们接着需要集中起来排序以确保整体排序正确。
测试分析器
尤其当你是Elasticsearch新手时,对于如何分词以及存储到索引中理解起来比较困难。
为了更好的理解如何进行,你可以使用analyze API来查看文本是如何被分析的。
GET /_analyze?analyzer=standard&text=Text to analyze