如何在 Lucene 中存储多种不同类型的文档

2023-12-24

我有一个现有的 Lucene 存储,其中包含数百万个文档,每个文档都代表一个实体的元数据。我有几个 Id 字段(Id1、Id2 .. Id5),每个文档可以有零个或多个该字段的值。一次只能由这些 Id 之一查询该索引。我已经独立地对这些字段建立了索引,并且一切都工作得很好。我最初选择使用 Lucene,因为它是迄今为止查询如此大量小文档的最快方法,我对我的决定感到满意。

然而现在我必须存储另一种类型的文档,它也代表实体的不同类型的元数据,并且具有 (Id1, Id2 .. Id5) 的值,并且也将由这些 Id 之一单独查询。现有元数据和这组新数据将彼此独立地存储和查询。

如何通过 Id 查询 Lucene,但仅针对一种类型的文档。我可以想到一些选择,但我想知道知情者根据经验建议什么,以保持 Lucene 的可管理性和快速性。

  1. 使用单独的 Lucene 索引。这可以避免该问题,因为文档类型是正交的。还有一个好处是能够单独读取和写入索引。
  2. 将新文档的 Id1..Idn 字段重命名为 XId1...XIdn。这样,一种类型的文档将不会与另一种类型的文档具有相同的字段名称。这似乎更像是避免问题的解决方法,而不是实际的解决方案。
  3. 添加数字字段“Type”并将索引更改为(Type,Idx)。这种方法似乎很浪费,因为每个索引还必须包含类型。

我能够破坏与现有设置的向后兼容性。如果我来添加另一种文档类型时可以重用该解决方案,那就太好了。


我肯定会拒绝第三种选择,因为选择性低type指数。中只有 2 个不同的值type每一项都包含数百万份文档。 Lucene 需要将这个巨大的发布列表与来自的短发布列表合并idN索引,它仍然可以非常快,但确实很浪费。

前两种方法在查询阶段实际上是相同的,因为对于独立类型的文档,您有不同的术语和发布列表。差异将出现在索引阶段。管理多个独立索引需要更多的协调,并使代码变得更加困难。然而,如果您计划在不同的上下文中使用索引,这可能是一个好主意。例如:

  • 物理位置;
  • 备份策略;
  • 可用性要求;
  • 索引时间要求(从客户端更改文档到在索引中可见的时间)

否则,我会选择第一个选项,因为它更简单且易于管理。

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

如何在 Lucene 中存储多种不同类型的文档 的相关文章

  • ElasticSearch 全文搜索

    我尝试在elasticsearch java api 中使用正则表达式运行全文搜索 我的过滤器是这样的 FilterBuilder qFilter FilterBuilders regexpFilter all text 但它只匹配一个单词
  • IntPoint 没有索引整数值

    当我们尝试使用字段类型 IntPoint 对整数值进行索引时 这些值似乎没有正确传输到我们的 Lucene 索引中 我们正在使用 Lucene 6 0 根据 Lucene 文档的代码片段 doc add new IntPoint LENGT
  • 在 lucene.net 中,我们可以在不给出字段名称的情况下搜索内容吗?它会搜索所有已索引的字段吗?

    在 lucene net 中 我们可以在不给出字段名称的情况下搜索内容 并且它将搜索所有已索引的字段 如果不提供字段名称 则无法搜索内容 但是您可以使用 MultiFieldQueryParser 在所有可用字段中进行搜索 E g Dim
  • 将 json 请求 POST 到 Solr,请求中带有cursorMark

    是否可以包括cursorMarkPOST 请求正文中的值而不是将其作为查询字符串参数发送 以下查询 query val abc limit 10 cursorMark sort id asc 返回一条错误消息 JSON 请求中未知的顶级键
  • 如何从 Solr 查询中获取 tf 和 idf 分数?

    以下 Solr 文档 https cwiki apache org confluence display solr Function Queries https cwiki apache org confluence display sol
  • 更改 SOLR 默认连接

    我正在使用嵌入 SOLR 的应用程序 SOLR 在 Tomcat 的 webapp 区域中像一场战争一样运行 是否有 SOLR 配置允许我切换搜索的默认 SOLR 行为以假定 AND 而不是 OR 作为连接运算符 在您的模式文件中添加 或修
  • Elasticsearch 中的嵌套与对象

    有人可以解释 Elasticsearch 文档中 对象 和 嵌套 字段之间的区别吗 我知道默认情况下字段被定义为对象 我还知道我可以用这样的点访问对象字段 my field name my field title 等 对象的文档 http
  • apache solr:group by 产生的数据总和

    我们有一个要求 需要按特定字段对记录进行分组 并获取相应数字字段的总和 前任 select userid sum click count from user action group by userid 我们尝试使用 apache solr
  • Solr 过滤查询 - 字符串与整数

    假设我正在尝试查询一堆具有类别的文档 并且我想将查询限制为指定的类别 据我所知 这只是使用 fq 参数 过滤器查询 我想知道将参数设置为整 数而不是字符串或数据通常的情况是否会提高性能 我只是会在右侧犯错 但我想我应该仔细检查一下 以防万一
  • Solr:在带有空格的字符串上使用通配符

    我的问题与这里讨论的问题基本相同 带空格的 Solr 通配符查询 https stackoverflow com questions 10023133 solr wildcard query with whitespace 但这个问题没有得
  • 如何使用 lucene 查询找到空的 Solr 文档字段

    我有一些这样的文件
  • 在elasticsearch中转义特殊字符

    我正在使用Elasticsearch python 客户端 https elasticsearch py readthedocs io en master 对我们托管的 elasticsearch 实例进行一些查询 我注意到一些字符需要转义
  • Lucene 标准分析器与 Snowball

    刚刚开始使用 Lucene Net 我使用标准分析器索引了 100 000 行 运行了一些测试查询 并注意到如果原始术语是单数 则复数查询不会返回结果 我知道雪球分析器增加了词干支持 这听起来不错 不过 我想知道 超过标准的雪球锣是否有任何
  • NoSQL(MongoDB)与 Lucene(或 Solr)作为数据库[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 随着基于文档数据库的 NoSQL 运动的发展 我最近关注了 MongoDB 我注意到如何将项目视为 文档 就像 Lucene 以及 Solr 用
  • query_string 和 multi_match 有什么区别?

    运行此查询时 query string query text fields field1 field2 multi match query text fields field1 field2 有什么不同 何时使用其中之一 何时使用另一个 q
  • lucene通配符查询带空格

    我有 Lucene 索引 其中包含城市名称 考虑我想搜索 新德里 我有字符串 New Del 我想将其传递给 Lucene 搜索器 并且我期望输出为 New Delhi 如果我生成类似 Name New Del 的查询 它将为我提供所有带有
  • Data-config.xml 和 mysql - 我只能加载“id”列

    我在 Windows Server 2012 上安装了 Solr 5 0 0 我想将表中的所有数据加载到 solr 引擎中 我的 data config xml 如下所示
  • 测量文档集之间的相似性

    出于说明目的 我们假设这是一个论坛服务 我需要计算每个用户帖子之间的 相似度 结果如下 among posts by user A similarity 60 among posts by user B similarity 20 我正在处
  • 在 Lucene.NET 中索引 Json 对象数组

    我正在努力将任意 json 对象放入 Lucene NET 索引中 给定的对象可能如下所示 name Tony age 40 address street Weakroad number 10 floor 2 door Left skill
  • Lucene 搜索错误堆栈

    我在尝试使用 Lucene 进行搜索时看到以下错误 版本1 4 3 关于为什么我会看到这个以及如何解决它有什么想法吗 Caused by java io IOException read past EOF at org apache luc

随机推荐

  • HttpClient 将 byte[] 发送到 WCF 服务会产生错误:最大数组长度配额 (16384) 或最大项目数

    我有一个 WCF 服务可以接受byte 我正在使用创建一个客户端HttpClient并收到以下错误 我在网上读到你必须设置readerQuotas在服务器和客户端上 但是如何在服务器上设置这些设置HttpClient Error 反序列化
  • Perl 中@_ 的含义是什么?

    是什么意思 在 Perl 中 佩尔多克 佩尔瓦尔 http perldoc perl org perlvar html ARG是检查任何特殊命名的 Perl 变量信息的第一个地方 Quoting 子程序内的数组 包含传递给该子例程的参数 更
  • 如何添加排名栏?

    我想选择记录并确定每个相似数据的排名号 我的数据如下 MEMBER ID LOAN AMOUNT 1 2 000 00 2 1 000 00 3 4 000 00 4 1 000 00 我想要的结果如下所示 RANK MEMBER ID L
  • 使用 netlink API 设置无线通道

    我正在Ubuntu Linux 12 04环境中开发WiFi工具 我需要在不同通道之间切换WiFi接口 目前 我在 Wireshark 源代码 ws80211 utils c 中名为 ws80211 set freq 的函数中找到了解决方案
  • FPDF 错误:此文档(mine.pdf)可能使用了 FPDI 附带的免费解析器不支持的压缩技术[重复]

    这个问题在这里已经有答案了 如何解决问题 制作模板时 使用 PDF A 1a 导出设置将其导出 在 Acrobat Pro 中 您可以使用此设置另存为 更多详细信息 MAC OS X 但也应该适用于 WIN 在 acrobat pro 中打
  • Touchenter 和 touchleave 事件支持

    我读到了有关 touchenter 和 touchleave 事件的信息 位于莫兹拉网站 https developer mozilla org en US docs Web API TouchEvent and w3网站 http www
  • 如何在 PHP 中设置深度数组

    假设我有以下功能 function setArray array key value array key value 上面的函数中 key只在第一层 如果我想在第二层或第三层设置key 如何重写函数 e g array foo bar te
  • 如何查看初始化权重(即训练前)?

    我正在使用 Keras 生成一个简单的单层前馈网络 当通过以下方式初始化权重时 我想更好地处理权重的值kernel initializer争论 有没有办法可以在初始化后 即训练完成之前 查看权重值 只需使用get weights 在模型上
  • 包含字符串文字的文档测试

    我有一个单元测试 我想为一个将 XML 作为字符串的函数编写 这是一个文档测试 我希望 XML 与测试一致 由于 XML 是多行的 我在文档测试中尝试了字符串文字 但没有成功 这是简化的测试代码 def test gt gt gt conf
  • Excel VBA 合并/组合具有相同名称的列

    我的项目工作存在类似于下面描述的问题 My dataset is like this What I want is like this LAST COLUMN 我拥有的是许多同名的列 例如 Is paid Job 我想要的是创建一个新列 T
  • 数据库不存在错误

    当我进行数据库备份时 出现数据库不存在的错误 但我可以正常附加数据库 并且其他进程 例如数据插入和更新 工作正常 但是当我进行数据库备份时 出现以下错误 我显示了错误屏幕截图和备份按钮代码 string cnstr Data Source
  • PHP 服务器发送事件连接不会关闭?

    我已经实施了一个服务器发送事件 https developer mozilla org en US docs Web API Server sent events with 事件源 https developer mozilla org e
  • 从函数返回包含单个项目的元组

    刚刚在 Python 中遇到了一点奇怪的地方 我想我应该记录它在这里将其写为一个问题 以防其他人试图使用与我相同的徒劳搜索词来找到答案 看起来元组解包可以做到这一点 因此如果您希望迭代返回值 则无法返回长度为 1 的元组 虽然看起来外表是骗
  • 添加 spring-data-jpa 架构引用后 Spring 配置 xml 无效

    启动 spring 上下文时出现以下异常 java lang Exception java lang IllegalStateException ContainerBase addChild start org apache catalin
  • 错误:(参数类型“String?”无法分配给参数类型“String”,因为“String?”可以为空,而“String”则不能。)在Flutter中

    我是 flutter 的新手 在传递字符串时遇到错误 并到处查找 最后将其添加到 StackOverflow 中 错误是 Error The argument type String can t be assigned to the par
  • Node js函数返回[object Object]而不是字符串值

    我对 java 脚本和 Node js 很陌生 我试图从 MySQL DB 获取一个值 返回值是 object Object 而不是字符串 我在网上没有找到任何答案 这是什么问题 我希望这里有人能提供帮助 行值为 object Object
  • MKAnnotationView 的子类

    我想知道是否有人知道 MKAnnotationView 类的任何子类 在苹果文档中 他们说一个例子是 MKPinAnnotationView 所以我想知道是否还有其他预先创建的子类 例如用于跟踪设备当前位置的子类 如果有人有关于创建我自己的
  • 如何反序列化 C# 对象中的嵌套 xml

    我正在使用 silverlight 来实现 xml 的反序列化 如下所示 字符串 xmlString
  • 在 Activity 开始之前访问 Activity

    我正在使用 Instrumentation TestCase 类来对活动中的某些内容进行单元测试 在启动此活动之前 我需要能够检查 SharedPreferences 的内容并编辑它们 我无法使用 setUp 方法创建 Activity 并
  • 如何在 Lucene 中存储多种不同类型的文档

    我有一个现有的 Lucene 存储 其中包含数百万个文档 每个文档都代表一个实体的元数据 我有几个 Id 字段 Id1 Id2 Id5 每个文档可以有零个或多个该字段的值 一次只能由这些 Id 之一查询该索引 我已经独立地对这些字段建立了索