gpt4 book ai didi

lucene - 提升多值字段

转载 作者:行者123 更新时间:2023-12-01 02:58:53 24 4
gpt4 key购买 nike

我有一组包含要索引的评分项目的文档。我们的数据结构如下:

Document
ID
Text
List<RelatedScore>

RelatedScore
ID
Score

我的第一个想法是使用 Field 的 Boost 属性将每个相关分数添加为多值字段,以在搜索时修改特定分数的值。
foreach (var relatedScore in document.RelatedScores) {
var field = new Field("RelatedScore", relatedScore.ID,
Field.Store.YES, Field.Index.UN_TOKENIZED);
field.SetBoost(relatedScore.Score);
luceneDoc.Add(field);
}

但是,计算出的“Norm”似乎适用于整个多字段 - 文档的所有相关分数值最终将具有相同的分数。

Lucene 中是否有允许此功能的机制?我宁愿不创建另一个索引来解决这个问题 - 感觉应该有一种使用单个索引的方法。如果没有办法做到这一点,我们必须弥补的一些想法是:
  • 按值降序插入多值字段项。然后以某种方式添加位置感知分析,为该领域的第一个项目分配更高的提升/分数。
  • 多次向该字段添加高值(value)分数。因此,一个 Score==1 的 RelatedScore 可能会被添加 3 次,而一个 Score==.3 的 RelatedScore 只会被添加一次。

  • 这两者都会导致这些字段的搜索保真度下降,是的,但它们可能已经足够好了。对此有何想法?

    最佳答案

    这似乎是 Payloads 的一个用例。我不确定这是否在 Lucene.NET 中可用,因为我只使用了 Java 版本。

    如果分数的绝对值不是那么重要,另一种方法是将它们离散化(根据值将它们放入桶中)并为每个桶创建一个字段。因此,如果您的分数范围为 1 到 100,则创建 10 个名为 RelatedScore0_10、RelatedScore10_20 等的存储桶,并且对于该存储桶中具有相关分数的任何文档,在该字段中添加“真”值。然后对于每个在 OR 查询上执行的搜索,例如:

    (RelatedScore0_10:true^1 RelatedScore10_20:true^2 ...)

    这样做的好处是您可以即时调整每个存储桶的提升值。否则,您需要重新索引以更改每个字段的字段规范(提升)值。

    关于lucene - 提升多值字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1645197/

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