是否可以直接修改术语频率/术语向量?

我想使用Lucene.NET来存储和查询术语向量.但是,我不希望从文档中创建术语向量.相反,我希望能够直接编写和更新术语向量,而无需术语/令牌的位置或偏移.

解决方法是从术语向量,即从术语向量生成文本

foo:3;吧:1

生成文本

foo,foo,foo,bar

并让Lucene索引该文本.如果我想将bar的术语频率更新为2,我可以获取存储的文本(或者从旧术语向量生成它,如果我不存储它),将其更改为

foo,foo,foo,bar,bar

并更新索引中的相应文档.

对于这么简单的任务来说,这是非常昂贵的.显然,这不是用例,Lucene是用来构建的.不过,我希望能够使用Lucene的强大功能进行查询等.

有没有办法直接为文档编写术语向量,还是有其他好的想法?

最佳答案 正如我在我的问题中所说,Lucene不是用于直接存储和操纵术语向量.最初的方法或多或少是至少在更新术语向量的过程中的方法:

>检索表示相关术语向量的文档
>更新文档的相应字段
>重新索引文档(删除,然后在Lucene中添加等于更新)

我还没有找到一种方法来更新矢量中的单个术语频率,而无需重新索引整个文档.

该问题中描述的方法的一个改进是将termvector编码为术语 – 频率对:

代替

foo foo foo bar

字段内容可以写成

foo:3; bar:1;

然后,您可以编写一个自定义TokenFilter,逐个读取这些标记,然后返回该项n次.这不会提高性能,但会简化术语向量的处理.如果您不熟悉自定义令牌过滤器和分析器,那么使用这种方法可能是不值得的,我会坚持使用我在问题中建议的天真版本.

点赞