es–搜索_Java基础使用

  • 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查询代码**

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);

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

  • 关键字 :term, terms, range, exists, missing match, match_all, multi_match 高亮搜索、scroll、排序

a) term
主要用于精确匹配,如数值、日期、布尔值或未经分析的字符串(not_analyzed)
QueryBuilder ageBuilder = QueryBuilders.termQuery("age", "10");

b) terms
和term有点类似,可以允许指定多个匹配条件。如果指定了多个条件,文档会去匹配多个条件,多个条件直接用or连接。以下表示查询title中包含内容dog或jumps的记录

{
"terms": {
"title": [ "dog", "jumps" ]
}
}

Java代码:



QueryBuilder builder = QueryBuilders.termsQuery("title", "dog", "jumps");

// 与termsQuery等效

builder =QueryBuilders.boolQuery().should(QueryBuilders.termQuery("title", "dog")).should(QueryBuilders.termQuery("title", "jumps"));


c) range
允许我们按照指定范围查找一批数据。数值、字符串、日期等
数值:


{
"range": {
"age": {
"gte": 20,
"lt": 30
}
}
}


java代码:
QueryBuilders.rangeQuery("age").gte(18).lt(20);

e) match, match_all, multi_match

match_all用于查询所有内容,没有指定查询条件

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

参考文档

  • es–搜索_Java基础使用

你可能感兴趣的:(es–搜索_Java基础使用)