我想使用Lucene.NET来存储和查询术语向量。但是,我不希望从文档中创建术语向量。相反,我希望能够直接编写和更新术语向量,而不需要术语/标记的位置或偏移。
解决方法是从术语向量生成文本,即从术语向量生成文本。
foo: 3; bar: 1
生成文本
foo, foo, foo, bar
让Lucene索引这段文字。如果我想将bar的词频更新为2
,我可以获取存储的文本(或者从旧的术语向量生成它,如果我不存储它),将它更改为
foo, foo, foo, bar, bar
并更新索引中的相应文档。
对于这样简单的任务来说,这是相当昂贵的。显然,这不是用例,Lucene是为之构建的。不过,我还是希望能利用Lucene的力量来查询,等等。
是否有一种方法可以直接为文档编写术语向量,或者您有其他好的想法?
发布于 2016-02-25 10:14:18
正如我在我的问题中所说的,Lucene并不打算直接存储和操作术语向量。至少在更新向量一词的过程中,最初的做法或多或少是要走的路:
Delete, then Add
等于Update
)我还没有找到一种方法来更新向量中的单个词条频率,而不对整个文档进行索引。
问题中描述的方法的一个改进是将术语向量编码为术语频率对:
而不是
foo酒吧
字段内容可以编写为
福:3;吧台:1;
然后,您可以编写一个自定义TokenFilter
,它逐个读取这些令牌,然后返回术语n
时间。这将不会提高性能,但简化了术语向量的处理。如果您不熟悉自定义令牌过滤器和分析器,那么使用这种方法可能是不值得的,我将坚持我在问题中已经提出的天真版本。
https://stackoverflow.com/questions/21970462
复制相似问题