7.1 Search
search API提供两种模式传递查询条件:url参数,request body
所有search API都支持跨索引、跨索引类型进行查询
7.2 URI Search
可以通过url参数传递查询条件,一个例子:
GET twitter/_search?q=user:kimchy
支持的参数:
q query string
df 默认查询的field
_source false,不返回_source部分;指定返回的fields
timeout 超时时间
from 返回list开始位置
size 返回list总体数目
query string会被解析成为一组temrs以及operators。A term可以是一个单词或者双引号包括的一个短语,如"quick brown"。query string支持一下特殊的语法:
field names
status:active status包含”active“
title:(quick OR brown) = title:(quick brown) title包含quick或者brown
author:"John Simth" author包含短语“John Simth”
book.\*:(quick brown) book.XXX包含quick或brown
_exists_:title title非空
wildcards
?代表一个字符,*代表一组字符
regular expressions
支持正则:name:/joh?n(ath[oa]n)/,正则表达式在/.../之间
fuzziness
查找相似单词,用~
quikc~ brwn~ foks~
ranges
date,numeric或者string类型支持区间查询。[]包含,{}不包含
date:[2012-01-01 TO 2012-12-31]
count:[1 TO 5]
count:[10 TO *]
date:{* TO 2012-01-01}
boolean opperators
+(必须包含) -(必须不包含)
quick brown +fox -news
fox必须包含
news必须不包含
quick brown可选,包含会增加关联度
AND,OR.NOT(&&,||,!)表示逻辑运算
grouping
()包含子query
7.3 Request Body Search
可以将查询条件包含在request body中,该类型的查询需要满足Query DSL。
query
query部分通过Query DSL指定查询条件
GET /_search { "query" : { "term" : { "user" : "kimchy" } } }
from/size
指定返回的list区间,from默认为0,size默认为10
GET /_search { "from" : 0, "size" : 10, "query" : { "term" : { "user" : "kimchy" } } }
sort
指定排序方式:
GET /my_index/_search { "sort" : [ { "post_date" : {"order" : "asc"}}, "user", { "name" : "desc" }, { "age" : "desc" }, "_score" ], "query" : { "term" : { "user" : "kimchy" } } }
source filtering
指定_source中返回的fields:
GET /_search { "_source": false, "query" : { "term" : { "user" : "kimchy" } } }
不返回_source
"_source": "obj.*" obj.下的所有fields
"_source": [ "obj1.*", "obj2.*" ]
"_source": { "includes": [ "obj1.*", "obj2.*" ], "excludes": [ "*.description" ] }
7.4 Count API
返回命中查询的doc数目:
GET /twitter/_doc/_count?q=user:kimchy
或者
GET /twitter/_doc/_count { "query" : { "term" : { "user" : "kimchy" } } }
7.5 Profile API
返回一个请求在各个component中的消耗的时间
GET /twitter/_search { "profile": true, "query" : { "match" : { "message" : "some number" } } }