Lucene 7+中如何通过文档ID获取DocValue?

2024-03-07

我正在将 DocValue 添加到文档中

doc.add(new BinaryDocValuesField("foo",new BytesRef("bar")));

检索具有 ID 的特定文档的值docId, I call

DocValues.getBinary(reader,"foo").get(docId).utf8ToString();

The getBinaryDocValues 中的函数最多支持卢塞恩6.6 https://lucene.apache.org/core/6_6_0/core/org/apache/lucene/index/BinaryDocValues.html, 但对于卢塞恩7.0 https://lucene.apache.org/core/7_0_0/core/org/apache/lucene/index/BinaryDocValues.html并且似乎不再可用。

So, 如何在 Lucene 7+ 中通过文档 ID 获取 DocValue(无需迭代BinaryDocValues / DocIdSetIterator,并且无需重新获取BinaryDocValues并使用advanceExact每次) ?


Theory

Doc Values是Lucene的column-stride字段值存储。文档值的目的是在查询时快速随机访问以进行分面和排序。 以下问题LUCENE-7407 https://issues.apache.org/jira/browse/LUCENE-7407将访问模式从随机访问切换为迭代器。由于迭代器 API 是一种比任意随机访问 API 限制性更强的访问模式,因此这一更改为 Lucene 提供了更多的自由度和能力来使用积极的压缩和其他优化:

  • 在稀疏数据的情况下减少磁盘空间使用
  • 即使在非稀疏情况下,文档值的压缩率和解码速度也更好
  • 删除缺失值的特殊列(getDocsWithField)并线程本地编解码器读取器

您可以在以下博客中了解此更改:

  • 作为迭代器的文档值 http://blog.mikemccandless.com/2017/03/apache-lucene-70-is-coming-soon.html
  • 使用 Apache Lucene 的稀疏与密集文档值 https://www.elastic.co/blog/sparse-versus-dense-document-values-with-apache-lucene

Practice

实际上,这种变化在某些情况下会导致性能下降,例如SOLR-9599 https://issues.apache.org/jira/browse/SOLR-9599。在主要情况下(分面和排序),迭代 API 在正确使用的情况下是可以的,甚至更重要的是,允许执行一些优化。 事实上,在很多情况下这个 API 并不是一个好的解决方案。所有这些情况都被视为不正确的用法而被丢弃(与我们在 java word 中使用 sun.misc.Unsafe 遇到的问题相同)。

实际上,org.apache.lucene.index.DocValuesIterator#advanceExact速度相当快,并且在某些实现情况下具有相似的性能和复杂性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Lucene 7+中如何通过文档ID获取DocValue? 的相关文章

  • 仅根据lucene中term出现次数较多的文档来计算分数

    我开始研究基于 lucene net 引擎的简历检索 文档 组件 它工作得很好 它会获取文档并根据 VSM 背后的理念是 查询词出现在 a 中的次数 文档相对于数量 该术语出现在所有 集合中的文档越多 该文件的相关内容是 询问 Lucene
  • 如何配置 Magento Enterprise 使用 Solr 作为主要搜索引擎?

    我尝试寻找文档 但它非常稀疏 我编写了以下指南 希望它可以帮助人们节省 2 3 个小时的安装 设置和配置时间 与 MySQL 全文搜索标准设置相比 使用 Solr 带来的性能提升非常惊人 在您的 Magento 安装中让它工作绝对值得花时间
  • SOLR 中的子字符串匹配

    我似乎无法弄清楚如何使用 SOLR 查找子字符串匹配 我已经根据前缀找出了匹配 这样我就可以让火腿与汉堡包匹配 我如何搜索 汉堡 来匹配汉堡包 我试过burger但这引发了错误 或 不允许作为 WildcardQuery 中的第一个字符 如
  • Lucene 上打开的文件太多错误

    我正在进行的项目是对一定数量的数据 长文本 建立索引 并将它们与每个时间间隔 大约 15 到 30 分钟 的单词列表进行比较 一段时间后 比如说第 35 轮 在开始索引第 36 轮的新数据集时 发生了此错误 ERROR 2011 06 01
  • Lucene:如何在单个字段下索引和搜索多个值

    如何在单个字段下索引和搜索多个值 例如说我有一个领域处理器这可能有i3 i5 i7 or i3 or i3 i5价值观 现在想象一下笔记本电脑的数据如下 data1 name laptop name price laptop price p
  • solr 中的文本字段排序

    我正在使用 solr 3 4 并希望 solr 搜索结果在文本字段上排序 如何实现像 int 自然排序一样对文本字段进行排序 有没有办法在查询时将文本字段转换为int 我的排序字段是字符串类型 我希望它在排序时表现得像 int 字段 我无法
  • LUCENE:搜索与正则表达式匹配的术语

    我需要搜索 lucene 索引中的任何术语 匹配特定的正则表达式 我知道我可以使用TermsComponent在solr中 如果配置如下
  • 如何使用 pysolr 对 solr 进行原子更新?

    我找不到关于如何使用 pysolr 更新 solr 的合适文档 截至 2014 年 11 月原子更新 https github com toastdriven pysolr commit c49be48d459448532b5ad0f505
  • SolrNet:过滤查询时保留 Facet 计数

    当我查询时 我收到以下方面 Field1 Key Best Facet 1 Value 999 Key Best Facet 2 Value 999 Field2 Key Second Best Facet 1 Value 421 Key
  • 复杂的 SOLR 查询,包括 NOT 和 OR

    我对 SOLR 搜索有一些相当复杂的要求 我需要针对标记内容的数据库执行这些搜索 我需要首先过滤数据库以获取与我的过滤器标签匹配的结果 任何具有黑名单中的标签的结果都应被删除 除非它们也包含白名单中的标签 假设我想检索所有标记为 森林 或
  • Lucene外来字符问题

    我在使用 Zend Lucene 和 等外来字符时遇到了一些严重的问题 这些问题在创建索引和查询索引时都会出现 我已经尝试过 iso 8859 1 和 utf 8 ISO 8859 1 不起作用的查询看起来像 area sk ne 使用 Z
  • 使用 sunspot/solr 搜索多个模型

    我已经能够成功地实现基本的全文搜索 但是当我尝试使用范围 with statements 时 任何涉及多对多关系模型的查询似乎都不适合我 我知道相关行位于数据库中 因为我的 sql 语句确实返回了数据 然而 太阳黑子查询不会返回任何结果 我
  • 如何使用 Solr 索引 pdf 内容?

    我正在尝试使用 SolrJ 索引一些 pdf 文档 如下所述http wiki apache org solr ContentStreamUpdateRequestExample http wiki apache org solr Cont
  • 如何在 Lucene 5 中获取 Span Term 查询的匹配范围?

    在 Lucene 中 要获取术语周围的单词 建议使用跨度查询 有很好的演练http lucidworks com blog accessing words around a positional match in lucene http l
  • Solr 中缺少强制 uniquekey 字段错误

    我的项目中有这个问题 我使用 Apache Poi 读取 xlsx excel 文件 并且想在 Solr 核心中对它们进行索引 我使用 SolrInputDocument 来索引读取文件 这是我的java代码 package org sol
  • Solrcloud Zookeper 设置:等待 4000ms 后未找到注册的领导者,集合:c1 切片:shard2

    我使用 solr 4 10 3 我通过 java 中的嵌入式 jetty 服务器启动 solr 我正在尝试使用 2 个分片 领导者 配置 solrcloud 我有一个外部动物园管理员设置 我在启动 solr 时指向动物园管理员实例 如下所示
  • MultiFieldQueryParser 正在从首字母缩略词中删除点

    我再次发布这个问题 因为我的查询没有得到答复 我正在使用 Lucene 开发图书搜索 api 用户可以搜索标题或描述字段包含 C F A 的书籍 我正在使用 StandardAnalyzer 以及停用词列表 我使用 MultiFieldQu
  • 如何将 Solarium 配置为使用 POST 而不是 GET 请求

    我面临的问题是我们发送到 solr jetty 的 uri 变得很长 超过 9k 字节 超出了 jetty 的默认限制 解决方案是从 GET 请求切换到 POST 请求 因为我们不想增加 jetty 可以接受的 requestHeaderS
  • 由于未定义符号,PECL solr 未加载:curl_easy_getinfo

    我正在尝试加载 PECL solr 扩展 我尝试使用 pecl install solr 并下载并使用 phpize configure make 来安装它 在这两种情况下 扩展安装时都没有错误 但在 apache 重新启动后 或在命令行上
  • 如何禁用 solr 管理页面

    对于生产来说 拥有一个甚至不要求登录凭据的 solr 管理员感觉不安全 如何禁用默认的 solr 管理页面 我只是希望我的 web 应用程序使用 Solr 进行搜索词索引 我强烈建议保留管理页面用于调试目的 它在很多情况下拯救了我 有多种方

随机推荐