【问题标题】:How do I detect if there is already a similar document stored in Lucene index如何检测是否已经有类似的文档存储在 Lucene 索引中
【发布时间】: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


【解决方案1】:

查看索引内部可能会有所帮助 - 将清楚地显示您正在查询的数据以及 Lucene 如何“查看”您的数据。您可以为此使用Luke。它有一些已知的 compatibility issues 和 Lucent.NET,但总比没有好。

【讨论】:

    【解决方案2】:

    我赞同卢克的建议。其他一些可以尝试的方法:

    1. 首先尝试一个精确的查询,比如对“文本”一词的 TermQuery。如果这不起作用,则不会进行模糊查询。
    2. 使用Explain() 查看得分情况(前提是您获得了其他命中)。
    3. 听从Debugging Relevance Issues in Search 的建议。

    【讨论】:

    • 如果 TermQuery 没有返回任何结果?但仍然是普通的搜索。这可能与搜索是用俄语完成的事实有关吗?
    • 我怀疑使用不同的分析器进行索引和检索是罪魁祸首。尝试同时使用RussianAnalyzer - 也使用RussianAnalyzer 进行FuzzyQuery 搜索。
    【解决方案3】:

    试试 Lucene 中的 MoreLikeThis 类...它有一些很棒的启发式编码,可以帮助您识别“相似”文档。

    【讨论】:

    • 是的,但我还需要知道绝对数的相似程度。
    • 1.使用 MLT 检索使用 Lucene 2 的相似文档。使用余弦相似度算法测量相似度。 Simmetrics 是一个很棒的 F/OSS 库(也有 .net 实现)
    猜你喜欢
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 2021-10-03
    • 2020-11-27
    • 1970-01-01
    • 2019-09-24
    相关资源
    最近更新 更多