我在使用 Lucene.NET 3.0.3 时遇到以下问题。
我的项目使用 StandardAnalyzer 和 StopWord-List(结合德语和英语单词)分析文档。
在搜索时,我手动创建搜索词并使用 MultiFieldQueryParser 对其进行解析。Parser 使用与索引文档相同的分析器进行初始化。
解析的搜索查询初始化了一个 BooleanQuery。BooleanQuery 和 TopScoreDocCollector 使用 IndexSearcher 在 Lucene 索引中搜索。
我的代码如下所示:
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 :*产品化*)
为什么我找不到搜索“Test- und Produktivumgebung”的文档?