1.查询参数说明
请求示例, 查询index名为my_index、type名为my_type下所有的数据
from、size: 用于分页,从第0条开始,取10条数据
sort: 排序的条件
aggs: 聚合分析的条件,与aggregations等价
bool: 用于组合多个查询条件,后面的内容会讲解
2.返回参数说明
- took: 本次请求处理耗费的时间(单位:ms)
- time_out: 请求处理是否超时。tip:如果查询超时,将返回已获取的结果,而不是终止查询
- _shards:本次请求涉及的分片信息,共5个分片处理,成功5个,失败0个
- hits:查询结果信息
- hits.total: 满足查询条件总的记录数
- hits.max_score: 最大评分(相关性),因为本次没有查询条件,所以没有相关性评分,每条记录的评分均为1分(_score=1)
- hits.hits: 本次查询返回的结果, 即从from到min(from+size,hits.total)的结果集
- hits.hits._score: 本条记录的相关度评分,因为本次没有查询条件,所以没有相关性评分,每条记录的评分均为1分
- hits.hits._source: 每条记录的原数据
** 3.java查询代码**
<code>
Client client = ConnectionUtil.getLocalClient();
SearchRequestBuilder requestBuilder =
client.prepareSearch("my_index").setTypes("my_type")
.setFrom(0).setSize(10);
Log.debug(requestBuilder);
SearchResponse response = requestBuilder.get();
Log.debug(response);
</code>
二. 不同搜索/过滤关键字介绍
- 关键字 :term, terms, range, exists, missing match, match_all, multi_match 高亮搜索、scroll、排序
a) term
主要用于精确匹配,如数值、日期、布尔值或未经分析的字符串(not_analyzed)
<code>QueryBuilder ageBuilder = QueryBuilders.termQuery("age", "10");</code>
b) terms
和term有点类似,可以允许指定多个匹配条件。如果指定了多个条件,文档会去匹配多个条件,多个条件直接用or连接。以下表示查询title中包含内容dog或jumps的记录
{
"terms": {
"title": [ "dog", "jumps" ]
}
}
Java代码:
<pre>
<code>
QueryBuilder builder = QueryBuilders.termsQuery("title", "dog", "jumps");
// 与termsQuery等效
builder =QueryBuilders.boolQuery().should(QueryBuilders.termQuery("title", "dog")).should(QueryBuilders.termQuery("title", "jumps"));
</code>
</pre>
c) range
允许我们按照指定范围查找一批数据。数值、字符串、日期等
数值:
<pre>
{
"range": {
"age": {
"gte": 20,
"lt": 30
}
}
}
</pre>
<code>
java代码:
QueryBuilders.rangeQuery("age").gte(18).lt(20);
</code>
e) match, match_all, multi_match
match_all用于查询所有内容,没有指定查询条件
- tip:
- 查询字符串时,match与term的区别
term查找时内容精确匹配,match则会进行分
析器处理,分析器中的分词器会将搜索关键字分割成单独的词(terms)或者标记(tokens)
eg. 查询title包含Jumps的内容, 用示例数据时,term匹配不到结果,但match会转化成jumps匹配,然后查找到结果。
参考文档