如何从Lucene索引中获得独特的结果?

时间:2013-11-18 09:54:54

标签: duplicates lucene

我正在尝试从lucene索引中搜索。我想获得独特的结果,但它也返回了重复的结果。我在谷歌搜索,发现它可以在收藏家的帮助下完成。我怎样才能做到这一点?

我使用以下代码:

File outputdir= new File("path upto lucene directory");
Directory directory = FSDirectory.open(outputdir);
IndexSearcher= new IndexSearcher(directory,true);

QueryParser queryparser = new QueryParser(Version.LUCENE_36, "keyword", new StandardAnalyzer(Version.LUCENE_36));

Query query = queryparser.parse("central");

topdocs = indexSearcher.search(query, maxhits);
ScoreDoc[] score = topdocs.scoreDocs;
int length = score.length;

4 个答案:

答案 0 :(得分:2)

您应该有一个名为“duplicate”的字段,并在索引时已经有重复的索引时将值设置为“true”。

所以你可以搜索

Query query = queryparser.parse("central -duplicate:true");

答案 1 :(得分:2)

您是在每次搜索之前索引内容吗?

如果是这样,我建议您将索引代码和搜索代码分开,因为如果您多次启动此脚本而不删除索引文件夹,Lucene不会覆盖索引但会再次将内容添加到索引中。我认为这就是为什么你会得到重复的结果。

答案 2 :(得分:0)

我认为你可以通过两种方式解决这个问题。

首先,您可以将指数分为两部分。一个是原创的,另一个是副本。您可以在索引步骤中执行此操作。然后你可以决定如何自己搜索。

其次,您可以编写一个收集器并将其用作IndexSearcher.search的参数。 collector应扩展TopDocsCollectorTopFieldDocCollector并覆盖collect方法。在您自己的collect方法中,我认为您可以使用Set保存得分大于0的doc的内容,然后使用super.collect(doc,score)完成Lucene的原始步骤。如果内容已经设置,我们可以停止Lucene步骤并处理下一个文档。

答案 3 :(得分:0)

你可以:

  1. 编制索引时 - 添加对每个文档都唯一的字段。

  2. 搜索时 - 使用DuplicateFilter

  3. nil