ElasticSerach基础语法
创始人
2024-03-21 16:28:07
0

一、常用查询关键字

  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

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...