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

时间:2014-02-23 15:47:23

标签: vector lucene lucene.net term

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

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

生成文本

foo: 3; bar: 1

生成文本

foo, foo, foo, bar

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

foo, foo, foo, bar, bar

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

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

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

1 个答案:

答案 0 :(得分:2)

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

  1. 检索代表相关术语向量的文档
  2. 更新文档的相应字段
  3. 重新索引文档(Lucene中Delete, then Add等于Update
  4. 我没有找到更新矢量中单个术语频率的方法,而无需重新索引整个文档。

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

    而不是

      

    foo foo foo bar

    字段内容可以写为

      

    FOO:3;棒:1;

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