【问题标题】:Reindexing using lucene/ deleting term from index使用 lucene 重新索引/从索引中删除术语
【发布时间】:2011-06-01 15:17:59
【问题描述】:

希望你能帮助我,这是我的问题:

编辑:现在我重新考虑,如果有办法从索引中删除一个术语,它无论如何都会起作用。有没有办法做到这一点?如果有,则无需阅读问题的其余部分。谢谢!

这是我打算做的: 1 - 我必须在删除标准停用词时索引一些文件。 2 - 之后,我必须计算每个术语的文档频率,并删除那些具有 df 的术语

我是怎么做的:

1 - 我使用 indexwriter 对文件进行索引,同时删除 std 停用词。 2 - 我计算每个术语的 df,并添加到停用词列表中。 3 - 然后,我使用 indexwriter 再次索引文本,但使用新的停用词列表

真正发生的事情:

我第一次索引它按计划进行。问题是当我尝试第二次索引时。结果变得非常不可预测:

1) 如果我运行一次程序,即使停用词有新词,也只会删除 std 停用词。

2) 如果我再次运行该程序,则删除 df

我将索引中的术语打印两次,一次是在第一次索引之后,一次是在第二次索引之后。

当我第二次运行时,df

也许我解释的方式有点混乱,如果有什么不明白的地方请告诉我。

我希望你们能帮助我。 非常感谢!

【问题讨论】:

  • API 提供了一种从索引中删除文档的方法。检查文档。

标签: java indexing lucene stop-words


【解决方案1】:

第二次索引文档时,请确保删除文档的第一个实例,否则您将夸大所有术语的 dfs。可以通过外部id字段删除文档:创建一个Term,field=idfield & value=externalId,然后使用IndexWriter的deleteDocument(Term)删除旧实例;然后添加新的。我认为没有办法明确删除术语;它们来自文档。

作为优化,您可以考虑以下几点: 1.索引所有文档 2. 找出所有 df = 1 的项 3. 删除带有每个此类术语的所有文档,跟踪它们的外部文档 ID 4.将条款添加到您的停止列表 5. 仅重新索引以前删除的文档。

当然,首先您必须仔细考虑删除这些术语的用例。 1. 为什么它们出现在索引中很重要? 2. 如果您稍后更新索引,并添加一个新文档,导致以前具有 df=1 的某些术语现在具有 df=2,会发生什么情况。您将无法对该术语进行索引,因为它已经在停止列表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多