GET /index_name/type_name/_search
{
"query":{ //查询必须有该属性
"bool":{//bool查询 联合查询 bool中所有字段指定的条件必须满足 bool字段中条件是与的关系
"must|must_not":[//must:必须 must中所有元素必须为true,must_not必须不 所有元素必须为false must和must_not中元素是与的关系,必须都为true才能返回true 以下等价于 field1 = 'xxx' and field2 between 2 and 3 must和must_not正好是反向关系
"match":{"field1":"xxx"},
"range":{"field2":{"gte":2,"lte":3}},
...
],
"should":[//should:满足一个 或的关系,元素中有一个满足即可
"term":{"field4":"xxx"},
"match_phrase":{"field3":"xxx"},
"minimum_should_match":2 //should中最少匹配两个
],
"filter":{//对搜索出的结果按条件过滤 filter中的字段匹配不影响评分
"match":{
"field1":"xxx"
}
},
...
}
},
"sort":[ //对结果进行排序 可以多个字段联合排序
"field1":"asc",
"field2":"desc",
...
],
"aggs":{ //聚合
"aggs_name":{ //聚合的名称 任意取
"sum|avg|min|max":{ //指标 支持累和 平均数 最小 最大 基数等等
"field":"field_name" //需要进行聚合的字段名
}
}
},
"_source":[//查询指定字段
"field1","field2"...
],
"from":0, //分页开始下标
"size":10//数据条数
}
层级结构:
>query
>match|term|terms|range|match_phrase|...
>bool
>must|must_not|should|filter...
>match|term|terms|match_phrase|range...
>sort|agg
注意:query子节点bool 或match|term|terms.. 只能同时存在一个
match子查询中会对搜索词进行分词,如果文档中匹配上了一个分词后的搜索词即会查询出。以下两个句子等价:
{
"query":{
"match":{
"fieldname":"hello world"
}
}
}
{
"query":{
"bool":{
"should":[
{"term":{"fieldname":"hello"}},
{"term":{"fieldname":"world"}}
]
}
}
}
match匹配时默认是搜索词分词后匹配文档,多个分词之间是或的关系,可以修改为and的关系:
{
"query":{
"match":{
"fieldname":{
"query":"hello world",
"operator":"and", //默认是or
"boost":2 //设置匹配该查询后分数的权重
}
}
}
}
上述语句是查询filedname中有hello又有world的文档,等价于
{
"query":{
"bool":{
"must":[
{"term":{"fieldname":"hello"}},
{"term":{"fieldname":"world"}}
]
}
}
}