gpt4 book ai didi

indexing - Solr/Lucene 文档中的部分更新

转载 作者:行者123 更新时间:2023-12-04 14:52:48 26 4
gpt4 key购买 nike

最近我们开始探索 Solr 部分索引更新。

完整和部分更新的 API 看起来很相似。代替

doc.addField("location", "UK")
solrClient.add(doc)

你必须写
doc.addField("location", map("set", "Germany"))
solrClient.add(doc)

我预计会发生什么:solr 将更新字段“位置”的倒排索引

实际发生的情况:
  • solr 加载文档
  • 的存储字段
  • 适用于文档
  • 的给定更新
  • 按 ID
  • 删除文档
  • 将文档写入索引

  • 结果,所有未存储的字段都丢失了。

    我在邮件列表中发现了一些旧的讨论,人们说这是预期的行为,您需要存储所有字段等等。我们不想存储所有字段。 “Stored”属性是为需要从 Solr 返回给调用者的响应中返回的字段而设计的。我们在响应中只需要很小的元信息,使所有存储的字段看起来都有些矫枉过正。

    问题是 - 为什么 solr/lucene 执行所有这些步骤来执行部分更新?据我了解,每个字段在自己的文件中都有自己的倒排索引,因此应该可以独立更新字段。从实际发生的情况来看,solr/lucene 无法更新单个字段的索引,我找不到原因。

    关于这个话题的讨论:
  • https://stackoverflow.com/a/34643681/2513573
  • https://lucene.472066.n3.nabble.com/Partial-update-vs-full-update-performance-td4069948.html
  • 最佳答案

    你的观察是正确的——这就是行为。原因是有些因素可能取决于其他字段(例如,通过 copyField 指令)、字段如何合并(位置增量等),这也是为什么部分更新只能对存储的字段进行的原因- 简单地加载文档,操作该特定字段的值,然后再次索引。
    这些字段没有自己的索引文件 - 它是完整索引的一组文件,并且索引只是附加 - 文档不会在此索引中就地更改(因此文档仅标记为已删除,并且然后将新文档附加到索引中)。当您运行时 optimize在索引上,索引被重写而不存在已删除的文档。
    有一种方法可以解决这个问题,如果您的字段满足一组条件,an in-place update can be performed instead .这就是你所要求的。

    In-place updates are very similar to atomic updates; in some sense, this is a subset of atomic updates. In regular atomic updates, the entire document is reindexed internally during the application of the update. However, in this approach, only the fields to be updated are affected and the rest of the documents are not reindexed internally. Hence, the efficiency of updating in-place is unaffected by the size of the documents that are updated (i.e., number of fields, size of fields, etc.). Apart from these internal differences, there is no functional difference between atomic updates and in-place updates.


    但是,要求可能与您的用例不匹配 - 即它们必须是非索引和数字(因为正在替换的是后台中的 docValue,而不是索引中的内容 - 通常无法执行此操作 -索引仅附加):

    An atomic update operation is performed using this approach only when the fields to be updated meet these three conditions:

    • are non-indexed (indexed="false"), non-stored (stored="false"), single valued (multiValued="false") numeric docValues (docValues="true") fields;
    • the version field is also a non-indexed, non-stored single valued docValues field; and,
    • copy targets of updated fields, if any, are also non-indexed, non-stored single valued numeric docValues fields.

    To use in-place updates, add a modifier to the field that needs to be updated. The content can be updated or incrementally increased.

    关于indexing - Solr/Lucene 文档中的部分更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60061358/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com