Hej guys,是否可以在Lucene中获取,更改和替换tfidf文档表示?
我正在进行一些排名相关的研究。我想用Lucene索引一系列文档,获取它生成的tfidf表示(每个文档),修改它们,将它们放回原处并观察固定查询集上的排名如何相应变化。
有没有非hacky的方式来做到这一点?
Hej guys,是否可以在Lucene中获取,更改和替换tfidf文档表示?
我正在进行一些排名相关的研究。我想用Lucene索引一系列文档,获取它生成的tfidf表示(每个文档),修改它们,将它们放回原处并观察固定查询集上的排名如何相应变化。
有没有非hacky的方式来做到这一点?
你的问题太模糊了,没有一个明确的答案,尤其是,你打算做什么:
拿TFIDF表示(每个文件)它产生,改变他们
Lucene的存储原始值打分:
所有这些数据是通过lucene的管理和将被用于计算给定查询术语的分数。自定义Similarity类可用于更改生成此分数的公式。
但是,您必须考虑到搜索查询是由多个术语组成的,并且单个术语的分数组合的方式也可以更改。您可以使用现有的Query类(例如BooleanQuery,DisjunctionMax),但也可以编写自己的类。
所以它真的取决于你想要做什么,但请注意,如果你想改变由lucene存储的原始值,这将是相当困难的。你将不得不编写一个自定义的lucene编解码器,可能大部分是查询堆栈,以利用你的新数据。
你应该考虑的一件好事是存储任意字节有效载荷的可能性。通过这种方式,您可以存储一个在lucene之外计算的值,并将其用于自定义相似度或查询中。 请参阅以下教程:Getting Started with Payloads和Custom Scoring with Lucene Payloads您可以提出一些建议。
谢谢@nomoa。我的想法太模糊了。但是,尽管如此,使用有效载荷似乎是答案。你认为可以通过自定义有效载荷来扩展一个已经存在的索引,或者我应该在索引期间尝试添加它们吗? – nadre
@nadre lucene并不真正支持更新操作,它总是一个删除+添加操作。所以我认为不值得尝试“扩展”现有的索引,只要从第一个数据集/索引计算出所需的值,就应该在第二遍索引期间添加它们。 – nomoa
这就是我的想法。谢谢你的帮助! – nadre