美文网首页
es–搜索_Java基础使用

es–搜索_Java基础使用

作者: jackLee | 来源:发表于2016-10-26 11:45 被阅读167次
    • 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:
    1. 查询字符串时,match与term的区别
      term查找时内容精确匹配,match则会进行分
      析器处理,分析器中的分词器会将搜索关键字分割成单独的词(terms)或者标记(tokens)
      eg. 查询title包含Jumps的内容, 用示例数据时,term匹配不到结果,但match会转化成jumps匹配,然后查找到结果。

    参考文档

    相关文章

      网友评论

          本文标题:es–搜索_Java基础使用

          本文链接:https://www.haomeiwen.com/subject/dzpduttx.html