使用Lucene.NET 3.0.3我有以下问题。
我的项目使用StandardAnalyzer和StopWord-List (结合德语和英语单词)来分析文档.
在搜索时,我手工创建搜索项,并使用MultiFieldQueryParser解析它。解析器与索引文档使用相同的分析器初始化。
解析的搜索查询初始化了一个BooleanQuery。在Lucene索引中使用BooleanQuery和TopScoreDocCollector搜索IndexSearcher。
我的代码看起来是:
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”索引文档字段,我就无法通过搜索这个术语找到这个文档。
如果我将搜索词更正为“”,我就会得到结果。
‘这个词在我的单子里.
我的搜索查询如下所示:
Manually generated search query: _**(+\*Test\* +\*und\* +\*Produktivumgebung\*)**_ Parsed search query: _**+(title:\*Test\*) +(title:\*und\*) +(title:\*Produktivumgebung\*)**_为什么我找不到搜索“Test”的文档?
发布于 2013-11-12 16:28:55
未分析通配符查询(例如,请参阅this question )。因为您是(如果我理解正确的话),将查询"Test- und Produktivumgebung"解释为(+*Test* +*und* +*Produktivumgebung*),所以分析器不会用于任何通配符查询,停止词也不会被删除。
如果您删除了执行该转换的步骤,那么查询"Test- und Produktivumgebung"应该被解析为短语查询并进行分析,并且应该工作得很好。消除这一步骤的另一个原因是,将领先的通配符应用于每个术语将导致您的性能变得非常差。这就是为什么必须手动启用引导通配符的原因,因为使用它们通常是个坏主意。
https://stackoverflow.com/questions/19931921
复制相似问题