【问题标题】:Lucene search using StopWords in StandardAnalyzer在 StandardAnalyzer 中使用 StopWords 进行 Lucene 搜索
【发布时间】:2013-11-24 18:20:05
【问题描述】:

我在使用 Lucene.NET 3.0.3 时遇到以下问题。

我的项目使用 StandardAnalyzer 和 StopWord-List(结合德语和英语单词)分析文档。
在搜索时,我手动创建搜索词并使用 MultiFieldQueryParser 对其进行解析。解析器使用与索引文档相同的分析器进行初始化。
解析的搜索查询初始化了一个 BooleanQuery。使用 IndexSearcher 在 Lucene 索引中搜索 BooleanQuery 和 TopScoreDocCollector。

我的代码如下:

using (StandardAnalyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30, roxConnectionTools.getServiceInstance<ISearchIndexService>().GetStopWordList()))
{
    ...
    MultiFieldQueryParser parser = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_30, searchFields, analyzer);
    parser.MultiTermRewriteMethod = MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE;
    parser.AllowLeadingWildcard = true;
    ...
    Query searchQuery = parser.Parse(searchStringBuilder.ToString().Trim);
    ...
    BooleanQuery boolQuery = new BooleanQuery();
    boolQuery.Add(searchQuery, Occur.MUST);
    ...
    TopScoreDocCollector scoreCollector = TopScoreDocCollector.Create(SearchServiceTools.MAX_SCORE_COLLECTOR_SIZE, true);
    ...
    searcher.Search(boolQuery, scoreCollector);
    ScoreDoc[] scoreDocs = scoreCollector.TopDocs().ScoreDocs;
}

如果我索引值为“Test- und Produktivumgebung”的文档字段,我无法通过搜索该术语找到该文档。
如果我将搜索词更正为“Test-Produktivumgebung”,我会得到结果。
“und”这个词在我的停用词列表中。

我的搜索查询如下所示:
手动生成的搜索查询:(+*Test* +*und* +*Produktivumgebung*)
解析的搜索查询:+(title:*Test*) +(title:*und*) +(title:*Produktivumgebung*)

为什么我找不到搜索“Test- und Produktivumgebung”的文档?

【问题讨论】:

    标签: lucene lucene.net analyzer stop-words standardanalyzer


    【解决方案1】:

    不分析通配符查询(例如,请参阅this question)。由于您(如果我理解正确的话)将查询 "Test- und Produktivumgebung" 解释为 (+*Test* +*und* +*Produktivumgebung*),因此分析器不会用于任何通配符查询,并且不会消除停用词。

    如果您消除执行该翻译的步骤,则查询 "Test- und Produktivumgebung" 应该被解析为短语查询并进行分析,并且应该可以正常工作。取消该步骤的另一个原因是,对每个术语应用前导通配符会导致您的性能变得非常差。这就是为什么必须手动启用前导通配符的原因,因为使用它们通常是个坏主意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多