【发布时间】:2010-02-09 17:02:59
【问题描述】:
我需要在我的数据库中排除重复项。问题是重复的文档不被视为完全匹配,而是相似的文档。为此,我决定使用FuzzyQuery,如下所示:
var fuzzyQuery = new global::Lucene.Net.Search.FuzzyQuery(
new Term("text", queryText),
0.8f,
0);
hits = _searcher.Search(query);
我们的想法是将最小相似度设置为 0.8(我认为这已经足够高了),这样只会找到相似的文档,不包括那些不够相似的文档。
为了测试这段代码,我决定看看它是否找到了已经存在的文档。为变量queryText 分配了一个存储在索引中的值。上面的代码什么也没找到,换句话说,它甚至没有检测到完全匹配。
索引是由这段代码构建的:
doc.Add(new global::Lucene.Net.Documents.Field(
"text",
text,
global::Lucene.Net.Documents.Field.Store.YES,
global::Lucene.Net.Documents.Field.Index.TOKENIZED,
global::Lucene.Net.Documents.Field.TermVector.WITH_POSITIONS_OFFSETS));
我遵循了下面的建议,结果是: TermQuery 不返回任何结果。 使用
构造的查询 var _analyzer = new RussianAnalyzer();
var parser = new global::Lucene.Net.QueryParsers
.QueryParser("text", _analyzer);
var query = parser.Parse(queryText);
var _searcher = new IndexSearcher
(Settings.General.Default.LuceneIndexDirectoryPath);
var hits = _searcher.Search(query);
返回具有完全匹配的文档和具有相似内容的其他几个文档的分数最高的几个结果。
【问题讨论】:
-
您能描述一下您要通过查找重复文档来解决的问题吗?
-
问题是找到一种方法来检测索引(数据库)中是否已经存在类似的文档,分别减少全局接近重复的数量。
标签: c# lucene lucene.net morelikethis