【Elasticsearch】ES精确查询和范围查询,ES时间字段排序实例,ES倒排索引介绍

这篇具有很好参考价值的文章主要介绍了【Elasticsearch】ES精确查询和范围查询,ES时间字段排序实例,ES倒排索引介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文ES版本是7.X以上,之前的版本语法可能会有些差异,请注意这些比较重要的细节。问海量数据搜索时为什么ES会比较快?

精确查询

termQuery

BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();

boolQuery.must(QueryBuilders.termQuery("name", queryVO.getKey()));

matchQuery 模糊查询

# paras在后
boolQuery.must(QueryBuilders.matchQuery("Name",queryVO.getKey());

multiMatchQuery 多个字段模糊查询

# paras在前,字段在后
boolQuery.must(QueryBuilders.multiMatchQuery(queryVO.getKey(),
                    "P1.text",
                    "Log",
                    "Name",
                    "Desc"));

排序字段

如果时间字段写入时用的类型是Text,可以用“时间字段.keyword”来处理

#只有字段是Text时,字段后面才加“.ketword”
searchSourceBuilder.sort("createTime.keyword", SortOrder.DESC);

范围查询

#范围查询
boolQuery.must(QueryBuilders
.rangeQuery("createTime.keyword")
.gt(queryVO.getCreateTimeStart())
.lt(queryVO.getCreateTimeEnd()));

ES分页查询

#查询前传入分页参数

#查询前传入分页参数
searchSourceBuilder.from((queryVO.getPageIndex() - 1) * queryVO.getPageSize()).size(queryVO.getPageSize());

#分页后拿到总记录数

searchHits.getTotalHits()

ES倒排索引

把文档D对应到关键词的映射转换为关键词到文档ID的映射,每个关键词都对应着一系列的文档,这些文档中都出现这个关键词。

es 时间范围搜索,软件研发,Java面试题,elasticsearch,大数据,搜索引擎

带有单词频率、文档频率和出现位置信息的倒排索引

es 时间范围搜索,软件研发,Java面试题,elasticsearch,大数据,搜索引擎

倒排表的压缩算法-FOR(Frame Of Reference)

倒排索引中采取的方案

(1)无损压缩,文档编号重排序后用压缩算法进行压缩:确保在倒排表中相邻的两个文档的文档编号也相邻,这样D-Gap值也较小。希望内容越相似的文档其文档编号也越相似。 例子:包含“百度”的文档冲排序为文档编号相邻的文档,则创建“百度”倒排表时候,相邻的差值(D-Gap)则较小。百度-----D-Gap{1,4,9} 转化为  百度------D-Gap{1,1,1},  要压缩的原始数据值变小,则获得较高的压缩率。 文档编号重新排序,可以依靠按照某些主题词来聚类,将同一个类的文档编号排成相邻的。

(2)有损压缩,静态索引裁剪:将不重要的索引项从倒排索引中清除,只保留重要的索引项。静态索引裁剪分为:

         a、以单词为中心的索引裁剪 根据默认返回数目,设定每个单词的倒排表的项至少为k个,设计相似性函数,计算单词和文档的相似性得分,把分数小于设定阈值的文档信息从倒排表中裁剪掉。

        b、以文档为中心的索引裁剪 在建立索引之前,把文档中不重要的词语删除掉。这样的话可能导致通用词或者停用词的倒排表为空。

*******故以单词为中心的索引裁剪是更加常用的方法。

优缺点:


1)查询时能够一次得到查询关键字对应的所有文档,查间效率高于正向索引

2)每个字或词对应的文档数量都在动态变化。倒排表的建立和维护较复杂

正向索引(如MySQL)

以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。

es 时间范围搜索,软件研发,Java面试题,elasticsearch,大数据,搜索引擎

优缺点:

1)索引建立和维护都比较容易

2)文本检索效率低


 

常见考点

海量数据查询时为什么使用倒排索引会比较快?

海量数据查询时,搜关键词,假设只存在正向索引(tnwrad index),那么就需要扫描索引库中的所有文档,找出所有包含关键j架构的文档;再根据打分模型进行打分,排出名次后呈现给用户。因为互联网上收录在搜索引擎中的文档的数目是个天文数字,这样的索引结构根本无法满足实时返回排名结果的要求。

ES版本演进 

es 时间范围搜索,软件研发,Java面试题,elasticsearch,大数据,搜索引擎文章来源地址https://www.toymoban.com/news/detail-612502.html

0.7.0

  •  Zen Discovery自动发现模块
  • Groovy Client支持
  • 简单的插件管理机制
  • 更好支持ICU分词器
  • 更多的管理API

1.0.0

  • Snapshot/Restore API支持聚合分析Aggregations
  • CAT API支持
  • 支持联合查询
  • 断路器支持
  • Doc values 引入

2.0.0

  • 增加了pipleline Aggregations
  • query/filter查询合并,都合并到query中
  • 存储压缩可配置Rivers模块被移除
  • Multicast组播发现被移除

5.0.0

  • Lucene 6.x
  • Shrink/Reindex/Rollover/ API
  • Ingest Node
  • Painless脚本代替Groovy
  • Text/Keyword替换String
  • 限制shard数量-1000

6.0.0

  • 稀疏性 Doc Values 的支持
  • 无缝滚动升级
  • 逐步移除Type

7.0.0

  • ES程序包默认打包jdk
  • 引入真正的内存断路器
  • 主分片数默认从5改为1
  • 正式去除单索引多Type,默认 doc

到了这里,关于【Elasticsearch】ES精确查询和范围查询,ES时间字段排序实例,ES倒排索引介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch序列 - SpringBoot整合ES:范围查询 range

    01. ElasticSearch range查询是什么? Elasticsearch 中的 range 查询可以用于查询某个字段在一定范围内的文档。 range 查询可同时提供包含和不包含这两种范围表达式,可供组合的选项如下: gt : 大于(greater than) lt : 小于(less than) gte : = 大于或等于(greater than or equal to) lte : = 小于

    2024年02月09日
    浏览(43)
  • ES Elasticsearch日期范围查询和查不出的坑

    如果字段为字符串类型,需要在字段后面加 .keyword 不加会出现查不出的问题。 查询全部,有大于2022-01-01的数据 按日期范围查询却没有查出来 字段后面加“.keyword”即可,分词问题

    2024年02月11日
    浏览(42)
  • Elasticsearch:ES|QL 查询中的元数据字段及多值字段

    在今天的文章里,我来介绍一下 ES|QL 里的元数据字段以及多值字段。我们可以利用这些元数据字段以及多值字段来针对我们的查询进行定制。这里例子的数据集,请参考文章 “Elasticsearch:ES|QL 快速入门”。 ES|QL 可以访问元数据字段。 目前支持的有: _index :文档所属的索引

    2024年02月04日
    浏览(60)
  • Elasticsearch es查询结果只返回指定筛选字段_source

    参考:https://www.exception.site/elasticsearch/elasticsearch-query-custom-columns *** 只返回title、channel结果;下列两种语法方式都可以

    2024年02月11日
    浏览(50)
  • Java查询es数据,根据指定id检索(in查询),sql权限过滤,多字段匹配检索,数据排序

    Java集成Elasticsearch,进行索引数据查询,并进行sql权限过滤,指定id检索(in查询),多字段匹配检索,数据排序。由于权限过滤是根据sql语句判断当前用户或其部门可查询的数据,所以采用以下方法: 1.通过sql过滤出当前用户可查询的数据id集合idsList; 2.将当前用户可查询的

    2024年02月22日
    浏览(66)
  • ElasticSearch系列 - SpringBoot整合ES:多字段查询 multi_match

    1. 什么是 ElasticSearch 的 multi_match 查询? 有时用户需要在多个字段中查询,除了使用布尔查询封装多个match查询之外,可替代的方案是使用multi_match。可以在multi_match的query子句中组织数据匹配规则,并在fields子句中指定需要搜索的字段列表。 以下是一个示例multi-match查询

    2023年04月21日
    浏览(67)
  • ElasticSearch7.3学习(二十二)----Text字段排序、Scroll分批查询场景解析

    场景:数据库中按照某个字段排序,sql只需写order by 字段名即可,如果es对一个 text field 进行排序,es中无法排序。因为文档入倒排索引表时,分词存入,es无法知道此字段的真实值。这样的结果往往不准确,因为分词后是多个单词,再排序就不是我们想要的结果了。 通常有两

    2024年02月08日
    浏览(43)
  • ElasticSearch系列 - SpringBoot整合ES:查询字段不为空的文档 exists

    1. ElasticSearch exists 查询是什么 在某些场景下,我们希望找到某个字段不为空的文档,则可以用exists搜索。字段不为空的条件有: 值存在且不是 null; 值不是空数组; 值是数组,但不是 [null] 例如,查询在字段中至少有一个非空值的文档: 这些文档都将匹配上面的查询: ①

    2024年02月06日
    浏览(73)
  • Elasticsearch (ES) 搜索引擎: 搜索功能:搜索分页、搜索匹配、全文搜索、搜索建议、字段排序

    原文链接:https://xiets.blog.csdn.net/article/details/132348920 版权声明:原创文章禁止转载 专栏目录:Elasticsearch 专栏(总目录) ES 搜索 API 官网文档:Search APIs 先创建一个索引,并写入一些文档用于搜索示例: 写入一些文档示例: 官网API:The _source option 搜索结果中的文档数据封装

    2024年02月08日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包