es–搜索_Java基础使用

2016-10-26  本文已影响167人  jackLee

2.返回参数说明

** 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>

二. 不同搜索/过滤关键字介绍

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用于查询所有内容,没有指定查询条件

  1. 查询字符串时,match与term的区别
    term查找时内容精确匹配,match则会进行分
    析器处理,分析器中的分词器会将搜索关键字分割成单独的词(terms)或者标记(tokens)
    eg. 查询title包含Jumps的内容, 用示例数据时,term匹配不到结果,但match会转化成jumps匹配,然后查找到结果。

参考文档

上一篇 下一篇

猜你喜欢

热点阅读