《Elasticsearch权威指南》案例集 之 基础入门
索引员工文档:
PUT /megacorp/employee/1 { "first_name" : "John", "last_name" : "Smith", "age" : 25, "about" : "I love to go rock climbing", "interests": [ "sports", "music" ] }
检索文档:
GET /megacorp/employee/1
轻量搜索:
GET /megacorp/employee/_search
GET /megacorp/employee/_search?q=last_name:Smith
使用查询表达式:
GET /megacorp/employee/_search { "query" : { "match" : { "last_name" : "Smith" } } }
更复杂的搜索:
GET /megacorp/employee/_search { "query" : { "bool": { "must": { "match" : { "last_name" : "smith" } }, "filter": { "range" : { "age" : { "gt" : 30 } } } } } }
全文搜索:
GET /megacorp/employee/_search { "query" : { "match" : { "about" : "rock climbing" } } }
短语搜索:
GET /megacorp/employee/_search { "query" : { "match_phrase" : { "about" : "rock climbing" } } }
高亮搜索:
GET /megacorp/employee/_search { "query" : { "match_phrase" : { "about" : "rock climbing" } }, "highlight": { "fields" : { "about" : {} } } }
分析:
GET /megacorp/employee/_search { "aggs": { "all_interests": { "terms": { "field": "interests" } } } } GET /megacorp/employee/_search { "query": { "match": { "last_name": "smith" } }, "aggs": { "all_interests": { "terms": { "field": "interests" } } } } GET /megacorp/employee/_search { "aggs" : { "all_interests" : { "terms" : { "field" : "interests" }, "aggs" : { "avg_age" : { "avg" : { "field" : "age" } } } } } }
索引文档:
PUT /{index}/{type}/{id}
{
"field": "value",
...
}
### 带id PUT /website/blog/123 { "title": "My first blog entry", "text": "Just trying this out...", "date": "2014/01/01" } ### 自动生成id POST /website/blog/ { "title": "My second blog entry", "text": "Still trying this out...", "date": "2014/01/01" }
取回一个文档:
GET /website/blog/123?pretty GET /website/blog/123?_source=title,text
检查文档是否存在:
### 用 HEAD 方法来代替 GET
### 文档存在返回200 OK,不存在返回 404 Not Found
curl -i -XHEAD http://scroll 从旧的索引检索批量文档 , 然后用 bulk API 把文档推送到新的索引中。从Elasticsearch v2.3.0开始, Reindex API 被引入。它能够对文档重建索引而不需要任何插件或外部工具。
GET /old_index/_search?scroll=1m { "query": { "range": { "date": { "gte": "2014-01-01", "lt": "2014-02-01" } } }, "sort": ["_doc"], "size": 1000 }索引别名和零停机
### 设置别名 my_index 指向 my_index_v1 PUT /my_index_v1/_alias/my_index ### 检测别名指向哪一个索引 GET /*/_alias/my_index ### 或哪些别名指向这个索引 GET /my_index_v1/_alias/* ### 一个别名可以指向多个索引,所以我们在添加别名到新索引的同时必须从旧的索引中删除它。这个操作需要原子化,这意味着我们需要使用 _aliases 操作 POST /_aliases { "actions": [ { "remove": { "index": "my_index_v1", "alias": "my_index" }}, { "add": { "index": "my_index_v2", "alias": "my_index" }} ] }近实时搜索:
### 默认情况下每个分片会每秒自动刷新一次。这就是为什么我们说 Elasticsearch 是 近 实时搜索: 文档的变化并不是立即对搜索可见,但会在一秒之内变为可见 ### 手动刷新 POST /_refresh POST /blogs/_refresh ### 设置刷新频率 PUT /my_logs { "settings": { "refresh_interval": "30s" } } ### 关闭自动刷新 PUT /my_logs/_settings { "refresh_interval": -1 } ### 每秒刷新 PUT /my_logs/_settings { "refresh_interval": "1s" }持久化变更:
### 一次完整的提交会将段刷到磁盘 ### 片每30分钟被自动刷新(flush),或者在 translog 太大的时候也会刷新 ### 手动刷新 POST /blogs/_flush POST /_flush?wait_for_ongoing ### 慎重设置,确保你了解后果 ### 设置 durability 参数 PUT /my_index/_settings { "index.translog.durability": "async", "index.translog.sync_interval": "5s" }