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

Vector 是否可以直接修改术语频率/术语向量?,vector,lucene,lucene.net,term,Vector,Lucene,Lucene.net,Term,我想使用Lucene.NET来存储和查询术语向量。但是,我不希望从文档中创建术语向量。相反,我希望能够直接写入和更新术语向量,而不需要术语/标记的位置或偏移 解决方法是从术语向量生成文本,即从术语向量生成文本 foo:3;条形图:1 生成文本 foo,foo,foo,bar 让Lucene为文本编制索引。如果我想将bar的术语频率更新为2,我可以获取存储的文本(或者从旧的术语向量生成,如果我不存储它),将其更改为 foo,foo,foo,bar,bar 并更新索引中的相应文档 对于这样一个简单的

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

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

foo:3;条形图:1

生成文本

foo,foo,foo,bar

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

foo,foo,foo,bar,bar

并更新索引中的相应文档

对于这样一个简单的任务来说,这是相当昂贵的。显然,这并不是用例,Lucene是为应用而构建的。尽管如此,我还是希望能够使用Lucene的强大功能进行查询,等等


有没有一种方法可以直接为文档编写术语向量,或者你还有其他好的想法

正如我在问题中所说,Lucene不打算直接存储和操作术语向量。至少在更新术语向量的过程中,初始方法或多或少是可行的:

  • 检索表示相关术语向量的文档
  • 更新文档的相应字段
  • 重新编制文档索引(
    Delete,然后在Lucene中添加
    equals
    Update
  • 我还没有找到一种方法可以在不重新索引整个文档的情况下更新向量中的单个术语频率

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

    而不是

    富富酒吧

    字段内容可以写成

    傅:3 ;;酒吧:1


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

    嗨,我也有同样的问题。你找到解决方案了吗?@eroy4u:没有,看看我下面的答案……对于Elasticsearch来说,同样的问题——我认为这个功能会非常有用。