入门
简单搜索
检查 ES 集群状态
1 | curl 'http://localhost:9200/?pretty' |
---|
关系型数据库和ES字段的对应关系
1 2 | Relational DB -> Databases -> Tables -> Rows -> Columns Elasticsearch -> Indices -> Types -> Documents -> Fields |
---|
插入一条数据
1 2 3 4 5 6 7 | PUT /megacorp/employee/1 { "first_name" : "John", "last_name" : "Smith", "age" : 25, "about" : "I love to go rock climbing", "interests": [ "sports", "music" ] } |
---|
查询文档
1 | GET /megacorp/employee/1 |
---|
搜索全部员工
1 | GET /megacorp/employee/_search |
---|
搜索姓氏中包含**“Smith”**的员工
1 | GET /megacorp/employee/_search?q=last_name:Smith |
---|
使用 DSL(Domain Specific Language)特定领域语言**)**查询
1 2 3 4 5 6 7 8 | GET /megacorp/employee/_search { "query": { "match": { "last_name": "Smith" } } } |
---|
找到姓氏为“Smith”的员工,但是我们只想得到年龄大于30岁的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | GET /megacorp/employee/_search { "query": { "filtered": { "filter": { "range": { "age": { "gt": 30 } } }, "query": { "match": { "last_name": "smith" } } } } } |
---|
全文搜索
搜索所有喜欢**“rock climbing”**的员工
1 2 3 4 5 6 7 8 | GET /megacorp/employee/_search { "query" : { "match" : { "about" : "rock climbing" } } } |
---|
短语搜索
要查询同时包含"rock"和"climbing"(并且是相邻的)的员工记录
1 2 3 4 5 6 7 8 | GET /megacorp/employee/_search { "query" : { "match_phrase" : { "about" : "rock climbing" } } } |
---|
高亮我们的搜索
1 2 3 4 5 6 7 8 9 10 11 12 13 | GET /megacorp/employee/_search { "query": { "match_phrase": { "about": "rock climbing" } }, "highlight": { "fields": { "about": {} } } } |
---|
分析
到所有职员中最大的共同点(兴趣爱好)是什么
1 2 3 4 5 6 7 8 | GET /megacorp/employee/_search { "aggs": { "all_interests": { "terms": { "field": "interests" } } } } |
---|
所有姓"Smith"的人最大的共同点(兴趣爱好)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | GET /megacorp/employee/_search { "query": { "match": { "last_name": "smith" } }, "aggs": { "all_interests": { "terms": { "field": "interests" } } } } |
---|
统计每种兴趣下职员的平均年龄
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | GET /megacorp/employee/_search { "aggs": { "all_interests": { "terms": { "field": "interests" }, "aggs": { "avg_age": { "avg": { "field": "age" } } } } } } |
---|
查看集群健康状态
1 | GET /_cluster/health |
---|
索引
索引一个文档
使用自己的ID
1 2 3 4 5 | PUT /{index}/{type}/{id} { "field": "value", ... } |
---|
自增ID
1 2 3 4 5 6 | POST /website/blog/ { "title": "My second blog entry", "text": "Still trying this out...", "date": "2014/01/01" } |
---|
检索文档
1 | GET /website/blog/123?pretty |
---|
pretty 在任意的查询字符串中增加 pretty 参数,类似于上面的例子。会让Elasticsearch美化输出**(pretty-print)** JSON 响应以 便更加容易阅读。 _source 字段不会被美化,它的样子与我们输入的一致。
检索文档的一部分
1 | GET /website/blog/123?_source=title,text |
---|
你只想得到 _source 字段而不要其他的元数据
1 | GET /website/blog/123/_source |
---|
更新整个文档
1 2 3 4 5 6 | PUT /website/blog/123 { "title": "My first blog entry", "text": "I am starting to get the hang of this...", "date": "2014/01/02" } |
---|
创建一个新文档
1 2 | POST /website/blog/ { ... } |
---|
不重复插入
1 2 | PUT /website/blog/123?op_type=create { ... } |
---|
1 2 | PUT /website/blog/123/_create { ... } |
---|
删除文档
1 | DELETE /website/blog/123 |
---|
文档局部更新
添加一个 tags 字段和一个 views 字段:
1 2 3 4 5 6 7 | POST /website/blog/1/_update { "doc" : { "tags" : [ "testing" ], "views": 0 } } |
---|
检索多个文档
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | GET /_mget { "docs": [ { "_index": "website", "_type": "blog", "_id": 2 }, { "_index": "website", "_type": "pageviews", "_id": 1, "_source": "views" } ] } |
---|
如果你想检索的文档在同一个 _index 中(甚至在同一个 _type 中),你就可以在URL中定义一个默认的 _index 或
者 / index/ type 。
1 2 3 4 5 6 7 | GET /website/blog/_mget { "docs" : [ { "_id" : 2 }, { "_type" : "pageviews", "_id" : 1 } ] } |
---|
如果所有文档具有相同 _index 和 _type
1 2 3 4 | GET /website/blog/_mget { "ids" : [ "2", "1" ] } |
---|
bulk API
1 2 3 4 5 | { action: { metadata }}n { request body }n { action: { metadata }}n { request body }n ... |
---|
搜索
空搜索
1 | GET /_search |
---|
查询所有类型为 tweet 并在 tweet 字段中包含 elasticsearch 字符的文档
1 | GET /_all/tweet/_search?q=tweet:elasticsearch |
---|
返回包含 “mary” 字符的所有文档的简单搜索
1 | GET /_search?q=mary |
---|
用户的名字是“Mary”
“Mary”发的六个推文
针对“@mary”的一个推文
映射及分析
查看 mapping
1 | GET /gb/_mapping/tweet |
---|
结构化查询 Query DSL
匹配所有的文档
1 2 3 4 5 6 | GET /_search { "query": { "match_all": {} } } |
---|
使用 match 查询子句用来找寻在 tweet 字段中找寻包含 elasticsearch 的成员
1 2 3 4 5 | { "match": { "tweet": "elasticsearch" } } |
---|
自定义分析器
1 2 3 4 5 6 7 8 9 10 11 | PUT /my_index { "settings": { "analysis": { "char_filter": { ... custom character filters ... }, "tokenizer": { ... custom tokenizers ... }, "filter": { ... custom token filters ... }, "analyzer": { ... custom analyzers ... } } } } |
---|