ElasticSerach基础语法

一、常用查询关键字

  1. match 查询

match查询会将搜索词分词,再与目标查询字段进行匹配,若分词中的任意一个词与目标字段匹配上,则可查询到。

{ "match": { "name": "南山" }}              

QueryBuilders.matchQuery("name", "南山")                 #java代码

2.match_phrase

默认使用 match_phrase 时会精确匹配查询的短语,需要全部单词和顺序要完全一样,标点符号除外。

{"query":{"match_phrase":{"sign": "好烦恼"}}}

QueryBuilders.matchPhraseQuery(“sign”,"好烦恼")

3.match_phrase_prefix

match_phrase_prefix 和 match_phrase 用法是一样的,区别就在于它允许对最后一个词条前缀匹配。

{"query":{"match_phrase_prefix":{"sign": "我就"}}}

QueryBuilders.matchPhrasePrefixQuery("sign","我就")
  1. multi_match 查询

multi_match 查询可以在多个字段上执行相同的 match 查询

{

    "multi_match": {

        "query":    "full text search",

        "fields":   [ "title", "body" ]

    }

}
//前一个参数为要查询的数据,后面的为属性名
QueryBuilders.multiMatchQuery("full text search","body","title"); 

5.range 查询

range 查询找出那些落在指定区间内的数字或者时间:

{

    "range": {

        "age": {

            "gte":  20,                    #gt  大于     gte  大于等于

            "lt":   30                        #lt  小于     lte   小于等于

        }

    }

}

QueryBuilders.rangeQuery("age").gte(20).lt(30)

6.term 查询

term 查询被用于精确值匹配,这些精确值可能是数字、时间、布尔或者那些 not_analyzed 的字符串:

{ "term": { "age":26}}

{ "term": {"date":"2014-09-01"}}

{ "term": { "sign": "英雄"}}

{ "term": { "tag": "full_text"}}

QueryBuilders.termQuery("sign", "英雄")

7.terms 查询

terms 查询和 term 查询一样,但它允许你指定多值进行匹配。如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件:

{ "terms": { "tag": [ "search", "full_text", "nosql" ] }}

QueryBuilders.termsQuery("sign","英雄","烦恼");

8.exists 查询和 missing 查询

exists 查询和 missing 查询被用于查找那些指定字段中有值 (exists) 或无值 (missing) 的文档。这与SQL中的 IS_NULL (missing) 和 NOT IS_NULL (exists) 在本质上具有共性:

{"exists": {"field": "title"}}

QueryBuilders.existsQuery("title");

9.fuzzy 模糊查询(需要给字段添加分词,不然可能不生效)

{  "query": {"match": {"content": {"query": "elastoc","fuzziness": "auto"}}}}

QueryBuilders.fuzzyQuery("name", "三");

二、组合多查询

bool (布尔)过滤器。 这是个 复合过滤器(compound filter) ,它可以接受多个其他过滤器作为参数,并将这些过滤器结合成各式各样的布尔(逻辑)组合。

1.must

文档 必须must 匹配这些条件才能被包含进来,与 AND 等价。

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();

queryBuilder.must(QueryBuilders.termQuery("sign", "英雄"))

2.must_not

文档 必须不 must_not 匹配这些条件才能被包含进来,与 NOT 等价。

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();

queryBuilder.mustNot(QueryBuilders.termQuery("sign", "英雄"))

3.should

至少有一个语句要匹配,与 OR 等价

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();

queryBuilder.should(QueryBuilders.termQuery("sign", "英雄"))

4.filter

必须 匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();

queryBuilder.filter(QueryBuilders.termQuery("sign", "英雄"))

基础参考

三、高级查询

(1)统计某个字段的数量count

ValueCountBuilder vcb= AggregationBuilders.count("count_uid").field("uid");

(2)去重统计某个字段的数量(有少量误差)cardinality

CardinalityBuilder cb= AggregationBuilders.cardinality("distinct_count_uid").field("uid");

(3)聚合过滤filter

FilterAggregationBuilder fab= AggregationBuilders.filter("uid_filter").filter(QueryBuilders.queryStringQuery("uid:001"));

(4)按某个字段分组filter

TermsBuilder tb= AggregationBuilders.terms("group_name").field("name");

(5)求和sum


SumBuilder sumBuilder= AggregationBuilders.sum("sum_price").field("price");

(6)求平均avg


AvgBuilder ab= AggregationBuilders.avg("avg_price").field("price");

(7)求最大值max


MaxBuilder mb= AggregationBuilders.max("max_price").field("price");

(8)求最小值min

MinBuilder min= AggregationBuilders.min("min_price").field("price");

(9)按日期间隔分组dateHistogram

DateHistogramBuilder dhb= AggregationBuilders.dateHistogram("dh").field("date");

(10)获取聚合里面的结果topHits

TopHitsBuilder thb= AggregationBuilders.topHits("top_result");

(11)嵌套的聚合nested

NestedBuilder nb= AggregationBuilders.nested("negsted_path").path("quests");

(12)反转嵌套reverseNested

AggregationBuilders.reverseNested("res_negsted").path("kps ");

聚合参考
https://blog.csdn.net/u012998680/article/details/120023384

实际使用参考
https://editor.csdn.net/md/?articleId=128201878

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值