(九)ElasticSearch 搜索/聚合查询/query_string

news/2023/12/9 5:01:06

1.Bulk 批量导入

POST /索引名/_bulk
{ "index" : { "_index" : "my_index", "_id" : "1" } }
{ "field1" : "value1" }
{ "index" : { "_index" : "my_index", "_id" : "2" } }
{ "field1" : "value2" }
{ "delete" : { "_index" : "my_index", "_id" : "3" } }

2.term多种查询

Term Query(词项查询):

Term 查询用于在指定字段中查找精确匹配指定项的文档,不进行分词处理。它适用于关键字字段、标识符字段等。示例:

GET /index_name/_search
{"query": {"term": {"field_name": "search_term"}}
}

Exists Query(存在查询):

Exists 查询用于查找具有指定字段存在的文档。它不关心字段的具体值,只关注字段是否存在。示例:

GET /index_name/_search
{"query": {"exists": {"field": "field_name"}}
}

Prefix Query(前缀查询):

Prefix 查询用于查找指定字段以指定前缀开头的文档。它可以用于模糊匹配、自动补全等场景。示例:

GET /index_name/_search
{"query": {"prefix": {"field_name": {"value": "prefix"}}}
}

Wildcard Query(通配符查询):

Wildcard 查询使用通配符模式匹配指定字段的值。它支持 “*” 通配符匹配任意字符序列和 “?” 通配符匹配单个字符。示例:

GET /index_name/_search
{"query": {"wildcard": {"field_name": {"value": "fu*k"}}}
}

Regexp Query(正则表达式查询):

Regexp 查询使用正则表达式模式匹配指定字段的值。它可以进行更灵活的模式匹配,但也更消耗资源。示例:

GET /index_name/_search
{"query": {"regexp": {"field_name": "fu.*k"}}
}

Ids Query(文档ID查询):

Ids 查询用于查找具有指定文档ID的文档。它可以一次查询多个文档。示例:

GET /index_name/_search
{"query": {"ids": {"values": ["id1", "id2"]}}
}

3.范围查询

在 Elasticsearch 中,范围查询(Range Query)用于查找指定字段的值在某个范围内的文档。您可以使用范围查询来过滤满足特定条件的文档。范围查询支持数字、日期和字符串类型的字段。您可以指定大于(gt)、大于等于(gte)、小于(lt)、小于等于(lte)某个值的范围条件。

数字范围查询:

GET /index_name/_search
{"query": {"range": {"field_name": {"gte": 10,"lte": 100}}}
}

上述示例表示在字段 “field_name” 中查找值在 10 到 100 之间(包括边界值)的文档。

日期范围查询:

GET /index_name/_search
{"query": {"range": {"date_field": {"gte": "2021-01-01","lte": "2021-12-31","format": "yyyy-MM-dd"}}}
}

在上述示例中,范围查询应用于日期字段 “date_field”,匹配日期在 2021 年 1 月 1 日到 2021 年 12 月 31 日之间的文档。

字符串范围查询:

GET /index_name/_search
{"query": {"range": {"field_name": {"gte": "A","lt": "M"}}}
}

上述示例表示在字段 “field_name” 中查找值在 “A” 到 “M” 之间(不包括边界值)的文档。

注意:范围查询对于大型索引和高基数字段可能会产生较高的计算成本。在使用时,建议使用适当的索引优化和查询性能调优策略。

4.布尔查询

在 Elasticsearch 中,布尔查询(Boolean Query)用于组合多个查询条件,以实现更复杂和精确的搜索需求。布尔查询可以通过逻辑运算符(AND、OR、NOT)将多个查询条件组合在一起,并根据条件的匹配结果来确定最终的搜索结果。

布尔查询支持以下几种查询子句:

1.Must(与操作):所有的 Must 子句都必须匹配才会返回文档。
2.Must Not(非操作):Must Not 子句中的查询条件必须不匹配才会返回文档。
3.Should(或操作):Should 子句中的查询条件可以有选择地匹配,用于增加相关性和评分。
4.Filter(过滤操作):Filter 子句用于过滤文档,不会对匹配与否进行评分。

以下是一个布尔查询的示例:

GET /index_name/_search
{"query": {"bool": {"must": [{ "term": { "field1": "value1" } },{ "range": { "field2": { "gte": 10, "lte": 100 } } }],"must_not": [{ "term": { "field3": "value2" } }],"should": [{ "term": { "field4": "value3" } },{ "term": { "field5": "value4" } }],"filter": [{ "term": { "field6": "value5" } }]}}
}

在上述示例中,布尔查询由四个不同的子句组成:

  • must 子句:要求 “field1” 匹配 “value1” 并且 “field2” 的值在 10 到 100 之间。
  • must_not 子句:要求 “field3” 不匹配 “value2”。
  • should 子句:要求 “field4” 匹配 “value3” 或者 “field5” 匹配 “value4”。
  • filter 子句:要求 “field6” 匹配 “value5”。

通过灵活组合这些子句,您可以根据实际需求构建复杂的查询逻辑,并获取满足条件的文档。布尔查询提供了强大的搜索能力,使您能够更精确地控制和过滤搜索结果。

minimum_should_match :
在 Elasticsearch 的布尔查询中,可以使用 “minimum_should_match” 参数来指定至少匹配多少个 “should” 子句才会返回文档结果。该参数用于控制 OR 组合条件下的最小匹配数。
默认情况下,“minimum_should_match” 参数的值为 1,即至少匹配一个 “should” 子句。
以下是使用 “minimum_should_match” 参数的示例:

GET /index_name/_search
{"query": {"bool": {"should": [{ "term": { "field1": "value1" } },{ "term": { "field2": "value2" } },{ "term": { "field3": "value3" } }],"minimum_should_match": 2}}
}

上述示例中,“minimum_should_match” 参数的值为 2,意味着至少要求匹配两个 “should” 子句才会返回文档结果。如果只有一个 “should” 子句匹配成功,将不会返回结果。

5.排序查询

在 Elasticsearch 中,可以使用排序查询(Sort Query)来对搜索结果进行排序。通过指定字段和排序顺序,您可以按照特定的排序规则对文档进行排序。
以下是一些常见的排序查询示例:

GET /index_name/_search
{"query": {"match_all": {}},"sort": [{ "field1": { "order": "asc" } },{ "field2": { "order": "desc" } }]
}

上述示例表示首先按照字段 “field1” 进行升序排序,然后在 “field1” 相同的情况下,按照字段 “field2” 进行降序排序。

6.聚合查询

在 Elasticsearch 中,聚合是一种用于对搜索结果进行分析和汇总的功能。
指标聚合用于计算一些数值型的指标,例如总和、平均值、最大值、最小值等。
桶聚合用于将文档分组到不同的桶(buckets)中,每个桶代表一个满足特定条件的子集。桶聚合可以根据字段的值、日期范围等进行分组。

指标聚合:

Sum Aggregation(求和聚合):

GET /index_name/_search
{"aggs": {"total_sum": {"sum": {"field": "numeric_field"}}}
}

以上示例将对字段 “numeric_field” 进行求和聚合,返回该字段所有文档的数值总和。

Average Aggregation(平均值聚合):

GET /index_name/_search
{"aggs": {"avg_value": {"avg": {"field": "numeric_field"}}}
}

以上示例将对字段 “numeric_field” 进行平均值聚合,返回该字段所有文档的数值平均值。

Value Count Aggregation(值计数聚合):

Value Count 聚合用于计算指定字段的文档数目,不考虑字段的具体值,只统计文档的数量。

GET /index_name/_search
{"aggs": {"count_field": {"value_count": {"field": "field_name"}}}
}

Cardinality Aggregation(基数聚合):

Cardinality 聚合用于计算指定字段的唯一值数量,即该字段的基数(cardinality)。这个聚合在计算高基数字段的唯一值数量时非常有用。
GET /index_name/_search

{"aggs": {"unique_values": {"cardinality": {"field": "field_name"}}}
}

Stats Aggregation(统计聚合):

Stats 聚合用于计算指定字段的一些基本统计信息,包括最小值、最大值、平均值、总和和文档数量。

GET /index_name/_search
{"aggs": {"stats_field": {"stats": {"field": "numeric_field"}}}
}

Extended Stats Aggregation(扩展统计聚合):

Extended Stats 聚合是 Stats 聚合的扩展版本,除了 Stats 聚合提供的基本统计信息外,还提供标准差和方差。

GET /index_name/_search
{"aggs": {"extended_stats_field": {"extended_stats": {"field": "numeric_field"}}}
}

Percentiles Aggregation(百分位数聚合):

Percentiles 聚合用于计算指定字段的百分位数,可以指定一组百分位数值来计算对应百分位的值。

GET /index_name/_search
{"aggs": {"percentiles_field": {"percentiles": {"field": "numeric_field","percents": [25, 50, 75]}}}
}

桶聚合:

Terms Aggregation(词项聚合):

GET /index_name/_search
{"aggs": {"group_by_field": {"terms": {"field": "category_field"}}}
}

以上示例将根据字段 “category_field” 进行词项聚合,将文档分组到不同的桶中,每个桶代表一个不同的类别。

排序聚合:

排序聚合用于对分组聚合结果进行排序,可以按照指定字段的值进行升序或降序排序。

{"aggs": {"group_by_field": {"terms": {"field": "category_field","size": 10,"order": {"avg_price": "desc"}},"aggs": {"avg_price": {"avg": {"field": "price"}}}}}
}

以上示例将按照字段 “category_field” 进行分组,并在每个桶中计算该词项的平均价格,然后按照平均价格降序排序。

筛选分组聚合

POST /nba/_search
{"aggs": {"aggsName": {"terms": {"field": "teamNameEn","include": ["A","B"],"exclude": ["C"],"size": 30,"order": {"avgAge": "desc"}},"aggs": {"avgAge": {"avg": {"field": "age"}}}}}}

范围分组聚合:

范围分组聚合用于将字段的值分组到不同的范围内,并返回每个范围的桶。

{"aggs": {"price_ranges": {"range": {"field": "price","ranges": [{ "to": 100 },{ "from": 100, "to": 500 },{ "from": 500 }]}}}
}

以上示例将根据字段 “price” 的值将文档分组到不同的价格范围内,并返回每个价格范围的桶。

Date Histogram Aggregation(日期直方图聚合):

GET /index_name/_search
{"aggs": {"group_by_date": {"date_histogram": {"field": "date_field","format": "MM","calendar_interval": "month"}}}
}

以上示例将根据日期字段 “date_field” 进行日期直方图聚合,将文档按照月份进行分组。

query_string 查询

在 Elasticsearch 中,query_string 查询是一种强大且灵活的查询方式,用于在文本字段中执行复杂的全文搜索。它支持使用 Lucene 查询语法来构建查询字符串,可以实现多字段查询、模糊搜索、布尔逻辑和通配符等功能。

使用 query_string 查询时,您可以在查询字符串中指定需要搜索的文本内容,并使用特定的语法来构建查询条件。以下是一个简单的示例:

{"query": {"query_string": {"query": "search text","default_field": "content"}}
}

上述示例中,我们使用 query_string 查询来搜索文本字段 “content” 中包含 “search text” 的文档。

query_string 查询支持的一些常见查询语法和操作符包括:

常规搜索:单词之间默认为逻辑与的关系,例如 “search text” 表示搜索同时包含 “search” 和 “text” 的文档。
通配符:支持通配符查询,例如 “te?t” 可以匹配 “test” 和 “text”。
通配符:支持通配符查询,例如 “te?t” 可以匹配 “test” 和 “text”。
布尔操作符:AND、OR、NOT 可以用来组合查询条件,例如 “search AND text” 表示搜索同时包含 “search” 和 “text” 的文档,“search OR text” 表示搜索包含 “search” 或 “text” 的文档。
括号:可以用括号来组合复杂的查询条件,例如 “(search AND text) OR (hello AND world)”。
范围搜索:可以使用 [ 和 ] 来指定范围搜索条件,例如 “price:[10 TO 100]” 表示搜索价格在 10 到 100 之间的文档。
请注意,query_string 查询是一种强大的查询方式,但同时也有一些安全性和性能方面的考虑。在使用时,建议谨慎处理用户输入的查询字符串,避免潜在的安全风险。同时,复杂的查询语法可能会影响性能,特别是在大型索引中进行全文搜索时,请合理使用查询语法以提高查询效率。


http://www.ppmy.cn/news/974827.html

相关文章

Lua gc 机制版本迭代过程简述

文章目录 内存自动化管理的概念Lua 中的 gc 对象Lua 中内存分配和释放的底层接口Lua 5.0 gc 算法Lua 5.1 gc 算法Lua 5.2 - Lua 5.4 gc 算法参考内容 内存自动化管理的概念 内存自动化管理是指在指定内存不再被需要时可以自动被释放。通常有两种方案来实现内存的自动化管理&am…

查理.芒格语录

事实上,大多数人不理解或不相信的东西,往往是最好的。比如一些投资观念和方法,因为这些东西还没有被广泛接受,那些有足够洞察力的人才能抓住这样的机会。

芒格-“永远不要有受害者心态”

我们应该以什么样的心态去对待我们的生活? 我不是受害者,我是幸存者。(ps :芒格深处利益之中,手握财富,应该见到过很多阴暗的人性。 他 可能也有魔鬼的一面)受害者的感觉:我认为这是一种反其道而行之的人类思考方式&…

转:查理·芒格:让打击和麻烦成为成长的契机

个人理解: 纵欲、妒忌、怨恨 -> 自律、自省、包容 -> 好奇、专注、毅力、自省 专注与坚持,兼收并蓄与博闻强记,屡败屡战与永不放弃 事物的本质决定了许多难题只有在逆向思考的时候才能得到最好的解决。 他总是致力于寻求证据来否定他已…

《查理·芒格传》精髓:查理芒格传奇的一生及背后的投资逻辑。

《查理芒格传》书中的精髓:查理芒格传奇的一生及背后的投资逻辑。 查理芒格是谁?他是股神巴菲特的合伙人,伯克希尔的副董事长,董事长是巴菲特,当今世界上最成功最伟大的投资家。芒格有多少钱一直没有公开,…

查理·芒格的23句名言

1、不要同一头猪摔跤,因为这样你会把全身弄脏,而对方却乐此不疲。 2、许多IQ很高的人却是糟糕的投资者,原因是他们的品性缺陷。 我认为优秀的品性比大脑更重要,你必须严格控制那些非理性的情绪,你需要镇定、自律&…

巴菲特+查理芒格+投资理论+经典语录+给韭菜的启示

巴菲特查理芒格投资理论经典语录给韭菜的启示 巴菲特: 一个老年人在零售店里发现老婆丢了,恰好遇到一个年轻人也在找自己的另一半,老人问:你妻子长什么样?年轻人答:“她可真是个金发美人啊,身材…

查理芒格推荐书

1、《穷查理宝典》 上海人民出版社(资料书:《投资大家芒格》(一) 2、《探索智慧:从达尔文到芒格》 …

查理芒格语录

要点 要有逆向思维 客观分析 每天读书 但要给每天读书要个固定的时间段,让自己不受打扰,高效的读书 如果你想要获得你要的东西,那就让自己配得上它。信任、成功和钦佩都是靠努力获得的 联系:怎样找到好的伴侣? 提升…

查理·芒格:让自己配得上想要的东西

巴菲特说他一生遇人无数,从来没有遇到过像查理这样的人。 94岁的查理芒格毕业于哈佛大学法学院,是沃伦巴菲特的黄金搭档,伯克夏哈撒韦公司的副主席,芒格的头脑是原创性的,从来不受任何条条框框的束缚,也没有…

芒格推荐书单(完全版32本)

我重新整理了一下芒格的2个推荐书单,这次相对比较全,具体如下: 1、《穷查理宝典》 上海人民出版社(资料书:《投资大家芒格》(一) 2、《探…

量化笔记_价值投资

前言 折腾量化交易的第二周,尝试按照价值投资的思想实现一个量化策略,底层运用模型为线性回归。文章的不足之处,望多多指正。 价值投资的思想原理 价值投资的底层逻辑是对处于低估期指标表现优良的资产进行买入,对已经处于高估…

查理·芒格:分享12个顶级思维模型

网络资料整理,另见:https://blog.csdn.net/UFv59to8/article/details/79695476

学会这些思维模型,窥见查理·芒格的致胜秘笈(二)

目录 导语 模型五:SCQA模型 模型六:问题树模型 模型七:MECE原则 模型八:SWOT分析 模型九:波特五力模型 模型十:波斯顿矩阵 导语 读者朋友们好,在我上一篇文章介绍了几个最核心和底层的模…

产品读书《穷查理宝典:查理.芒格智慧箴言录》

要通过提升自己,来强化对世界的感知,内在的能力才能增长,和世界的大趋势才能互相匹配。这种匹配度提高了,无论你是用来投资、创业,还是做其他事情,都会无往而不利。 查理芒格在书中反复强调的4点内容有&a…

查理芒格的书单

1、《穷查理宝典》 2、《探索智慧:从达尔文到芒格》 3、《沃伦.巴菲特的投资组合:集中投资策略》 …

\t\t查理·芒格

查理芒格 查理.芒格 查理芒格(Charles Thomas Munger,1924年1月1日—)美国投资家, 沃伦巴菲特的黄金搭档,伯克夏哈撒韦公司的副主席 查理?芒格是沃沦巴菲特的黄金搭档,有“幕后智囊”和“最后的秘密武器”之称&#x…

巴菲特与搭档查理芒格手把手教你如何读财报,唯一一篇百看不厌炒股最实用文章

巴菲特与搭档查理芒格手把手教你如何读财报,唯一一篇百看不厌炒股最实用文章 来源投资快报 巴菲特和芒格是老乡,非常有缘分的是芒格和巴菲特爷爷的杂货铺只有六个街区,甚至小时候芒格还在杂货铺打过工,不过那个时候他们并不认识。芒格从小就很优秀,小小年纪就会谈判,就…

Sentinel授权规则与规则持久化

🌳🌳🌳🌳🌳🌳🌳 学习授权规则前,先想想SpringCloud Gateway的黑白名单,请求过网关,gateway会去鉴权。但如果有人把微服务信息泄露出去了呢?此时微…

碎语 二三

看了下,从上篇文章的4月起,至今已有4个月没有输出。 这期间,读了机械工业出版社的《linux内核设计与实现》,很有收获。曾尝试写点东西,但是内功还是欠缺,蹉跎半个月,写了五六百字,最…
最新文章