常见搜索语法

match all

GET /_search { "query": { "match_all": {} } }

match

GET /_search { "query": { "match": { "title": "my elasticsearch article" }} }

multi match

多字段搜索
GET /test_index/test_type/_search { "query":{ "multi_match":{ "query":"test", "fields":[ "test_field", "test_field1" ] } } }

range query

查询30以上员工
GET /company/employee/_search { "query":{ "range":{ "age":{ "gte":30 } } } }

term query

不分词查询
GET /test_index/test_type/_search { "query":{ "term":{ "test_field":"test hello" } } }

terms query

GET /_search { "query": { "terms": { "tag": [ "search", "full_text", "nosql" ] }} }

多条件组合

GET /website/article/_search { "query":{ "bool":{ "must":[ { "match":{ "title":"elasticsearch" } } ], "should":[ { "match":{ "content":"elasticsearch" } } ], "must_not":[ { "match":{ "author_id":111 } } ] } } }
 
 
{ "bool":{ "must":{ "match":{ "title":"how to make millions" } }, "must_not":{ "match":{ "tag":"spam" } }, "should":[ { "match":{ "tag":"starred" } } ], "filter":{ "range":{ "date":{ "gte":"2014-01-01" } } } } }
bool must,must_not,should,filter
 
 
每个子查询都会计算一个document针对它的相关度分数,然后bool综合所有分数,合并为一个分数,当然filter是不会计算分数的
{ "bool":{ "must":{ "match":{ "title":"how to make millions" } }, "must_not":{ "match":{ "tag":"spam" } }, "should":[ { "match":{ "tag":"starred" } } ], "filter":{ "bool":{ "must":[ { "range":{ "date":{ "gte":"2014-01-01" } } }, { "range":{ "price":{ "lte":29.99 } } } ], "must_not":[ { "term":{ "category":"ebooks" } } ] } } } }
 
filter方式
GET /company/employee/_search { "query":{ "constant_score":{ "filter":{ "range":{ "age":{ "gte":30 } } } } } }