II. Document
Write
curl -X PUT -H 'Content-Type: application/json' 'http://localhost:9200/change/change/c6673e3c3c29af5c' -d '
{
"id": "c6673e3c3c29af5c",
"node": 140000,
"pripid": "560E8C402E5914FAE0531ECDA8C0CF0D",
"date": 20180418,
"column": "E_ENT_BASEINFO.OPTO",
"new_value": "2027-08-01",
"old_value": "",
"type": "UPDATE"
}'
Get
curl -X GET 'http://localhost:9200/change/change/c6673e3c3c29af5c'
不显示索引内容
curl -X GET 'http://localhost:9200/change/change/c6673e3c3c29af5c?_source=false'
只显示索引内容
curl -X GET 'http://localhost:9200/change/change/c6673e3c3c29af5c/_source'
Multi Get
curl -X GET "localhost:9200/_mget" -H 'Content-Type: application/json' -d'
{
"docs" : [
{
"_index" : "change",
"_type" : "change",
"_id" : "c6673e3c3c29af5c"
},
{
"_index" : "change",
"_type" : "change",
"_id" : "3750ab2377453d13"
}
]
}
'
curl -X GET "localhost:9200/change/_mget" -H 'Content-Type: application/json' -d'
{
"docs" : [
{
"_type" : "change",
"_id" : "c6673e3c3c29af5c"
},
{
"_type" : "change",
"_id" : "3750ab2377453d13"
}
]
}
'
curl -X GET "localhost:9200/change/change/_mget" -H 'Content-Type: application/json' -d'
{
"docs" : [
{
"_id" : "c6673e3c3c29af5c"
},
{
"_id" : "3750ab2377453d13"
}
]
}
'
curl -X GET "localhost:9200/change/change/_mget" -H 'Content-Type: application/json' -d'
{
"ids": ["c6673e3c3c29af5c","3750ab2377453d13"]
}'
curl -X GET "localhost:9200/change/change/_mget" -H 'Content-Type: application/json' -d'
{
"docs":[
{
"_id":"c6673e3c3c29af5c",
"_source":["old_value","date"]
},
{
"_id":"3750ab2377453d13",
"_source":["new_value"]
}
]
}'
删除索引
curl -X DELETE 'http://localhost:9200/change/change/5c0d81efc98b8954'
按条件删除
curl -X POST 'http://localhost:9200/change/change/_delete_by_query' -H 'Content-Type: application/json' -d'
{
"query": {
"match": {
"pripid": "560E8C402E5914FAE0531ECDA8C0CF0D"
}
}
}'
更新索引
curl -X POST 'http://localhost:9200/change/change/c6673e3c3c29af5c/_update' -H 'Content-Type: application/json' -d'
{
"doc": {
"node": 110000
}
}'
批量操作
curl -X POST 'http://localhost:9200/_bulk' -H 'Content-Type: application/json' -d'
{ "index" : { "_index" : "change", "_type" : "change", "_id" : "c6673e3c3c29af5c" } }
{"id":"c6673e3c3c29af5c","node":140000,"pripid":"560E8C402E5914FAE0531ECDA8C0CF0D","date":20180418,"column":"E_ENT_BASEINFO.OPTO","new_value":"2027-08-01","old_value":"","type":"UPDATE"}
{ "index" : { "_index" : "change", "_type" : "change", "_id" : "5c0d81efc98b8954" } }
{"id":"5c0d81efc98b8954","node":500000,"pripid":"500107010100010395","date":20180418,"column":"E_ENT_BASEINFO.OPTO","new_value":"2099-12-31","old_value":"","type":"UPDATE"}
{ "index" : { "_index" : "change", "_type" : "change", "_id" : "3750ab2377453d13" } }
{"id":"3750ab2377453d13","node":500000,"pripid":"5001071201403190469324","date":20180418,"column":"E_ENT_BASEINFO.OPTO","new_value":"2099-12-31","old_value":"","type":"UPDATE"}
'
每行数据都要指定 index, type 和 id 。
重建索引
curl -X POST 'http://localhost:9200/_reindex' -H 'Content-Type: application/json' -d'
{
"source": {
"index": "change"
},
"dest": {
"index": "new_change"
}
}'
对部分索引重建
curl 'http://localhost:9200/_reindex' -H 'Content-Type: application/json' -d '
{
"source":{
"index":"change",
"type": "change",
"query":{
"term":{
"node": 650000
}
}
},
"dest":{
"index":"change_650000"
}
}'
合并为新索引
curl 'http://localhost:9200/_reindex' -H 'Content-Type: application/json' -d '
{
"source":{
"index":["change_650000", "change_410000"],
"type": ["change", "change"]
},
"dest":{
"index":"change_410000_650000"
}
}'
index 可以使用通配符。
远程重建索引
curl -X POST 'http://localhost:9200/_reindex' -d '
{
"source": {
"remote": {
"host": "http://otherhost:9200",
"username": "user",
"password": "pass"
},
"index": "source",
"query": {
"match": {
"test": "data"
}
}
},
"dest": {
"index": "dest"
}
}'
III. 检索
初始化数据
curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '
{
"user" : "kimchy",
"postDate" : "2009-11-15T14:12:12",
"message" : "trying out Elasticsearch"
}'
curl -XPUT 'http://localhost:9200/twitter/tweet/2' -d '
{
"user" : "allen",
"postDate" : "2010-01-25T11:02:10",
"message" : "using Elasticsearch"
}'
分页
分页使用的参数 from 和 size ,from 表示从第一个文档开始,默认从 0 开始,size 表示一页几条记录,默认是 10 条。
curl '192.168.207.14:29200/change/_search' -d '
{
"from":0,
"size":10,
"query":{
"term" : {"date" : "20170518"}
}
}'
和数据库分页不同,elasticsearch 的分页数量 from + size 不能超出 index.max_result_window 参数的限制(默认为 10000)。该值可在 elasticsearch 的配置文件中修改。
查询得分
每个查询到的文档都有一个得分,查询结果可以通过得分来过滤,不过这个不常用,因为无法知道每个文档在每次查询中的具体得分。
curl 'localhost:9200/twitter/_search' -d '
{
"min_score":0.5,
"query":{
"term" : {"user" : "kimchy"}
}
}'
指定返回的字段
curl 'localhost:9200/twitter/_search' -d '
{
"fields":["user","message"],
"query":{
"term" : {"user" : "kimchy"}
}
}'
curl 'localhost:9200/twitter/_search' -d '
{
"query":{
"term" : {"user" : "kimchy"}
}
}'
如果不指定 fields ,elasticsearch 默认返回 _source 字段。
指定查询的类型
elasticsearch 提供了一下几种查询类型:
- query_and_fetch
1.3 以后移除 - query_then_fetch
先获文档排序信息,在获取相关分片,返回结果最大为 size 取值。 - dfs_query_and_fetch
1.3 以后移除 - dfs_query_then_fetch
比 query_then_fetch 多了一步计算分布式词频。 - count
2.0 废弃 - scan
2.0 废弃
可在查询是指定类型curl 'localhost:9200/twitter/_search?pretty=true&search_type=query_then_fetch' -d '{ "query":{ "term" : {"user" : "kimchy"} } }'
默认是 query_then_fetch
指定检索执行的位置(preference)
elasticsearch 默认在分片之间随机执行,可以修改为一下方式:
- _primary
在主分片上执行。 - _primary_first
优先在主分片上执行,如果主分片不可用,则在其他分片上执行。 - _local
在请求发送到的节点上的分片上执行。 - _replica
在副本上执行。 - _replica_first
优先在副本上执行。 - _only_node:xyz
在 node_id 为 xyz 的节点上执行。 - _prefer_node:xyz
优先在 node_id 为 xyz 的节点上执行。 - _shards:2,3
在 2 和 3 分片上执行。 - _only_nodes
在子节点上执行。 - custome
一个字符串值,带有相同的值的请求会在相同的节点上执行。
curl 'localhost:9200/twitter/_search?preference=_local' -d '{
"query":{
"term" : {"user" : "kimchy"}
}
}'
DSL 查询
DSL (Domain Specific Language)包含两种类型的子句:
- Leaf query clauses
用特定的值查找特定的字段 - 复合子句
Leaf query clauses 和 复合子句的包装全文检索
match_all
curl 'localhost:9200/twitter/_search' -d '{ "query":{ "match_all": { "boost" : 1.2 } } }'
match
有三种类型:curl 'localhost:9200/twitter/_search' -d '{ "query":{ "match" : { "message" : "Elasticsearch" } } }'
- boolean match
默认的 match 查询类型。
operator 的取值为 or 或 and ,默认为 or 。curl 'localhost:9200/twitter/_search' -d '{ "query":{ "match" : { "message" : { "query" : "trying Elasticsearch", "operator" : "and" } } } }'
- match_phrase
使用 slop 来定义查询的词之间间隔多少个词算查询匹配。curl 'localhost:9200/twitter/_search' -d '{ "query":{ "match_phrase" : { "message" : { "query" : "trying Elasticsearch", "slop" : 2 } } } }'
- match_phrase_prefix
可以将最后一个词作为前缀匹配。比 match_phrase 多了一个 max_expansions 参数,表名最后一个词可以扩展多少个前缀。curl 'localhost:9200/twitter/_search' -d '{ "query":{ "match_phrase_prefix" : { "message" : { "query" : "using E", "max_expansions": 20 } } } }'
term 级别查询
term 查询
精确匹配给定的值。
curl 'localhost:9200/twitter/_search' -d '{
"query":{
"term" : {"user" : "kim"}
}
}'
term 不会解析查询的字段,即不会对字段分词
terms 查询
curl 'localhost:9200/twitter/_search' -d '{
"query":{
"terms" : {
"user" : ["kimchy", "allen"]
}
}
}'
排序
elasticsearch 使用的默认排序为得分逆序排序。
"sort":[
{"_score": "desc"}
]
我们可对一个或多个字段指定排序规则。