1

我正在使用 umbraco,我已经检查并运行,但是我的查询被删除了单词

例如:

我正在使用以下代码行搜索“月球上的人”,变量“searchTerm”应包含“月球上的人”:

var Searcher = ExamineManager.Instance.SearchProviderCollection["MySearcher"];
var searchCriteria = Searcher.CreateSearchCriteria();

var query = searchCriteria.Field("Name", searchTerm).Compile();

但是,当我调试时,查询是这样生成的:

{ SearchIndexType: , LuceneQuery: +Name:"man moon" }

请注意它是如何从 searchTerm 中删除“on the”字样的?

大概这些是因为它们被视为 STOP/保留词。但是,这意味着我没有得到我期望的搜索结果。

我怎样才能解决这个问题?

4

1 回答 1

2

在内部,StandardAnalyzer 使用 StopAnalyzer 类作为标准索引过程的一部分。StopAnalyzer ( http://lucenenet.apache.org/docs/3.0.3/d7/df5/_stop_analyzer_8cs_source.html#l00054 ) 包含一个方法,该方法允许您将一组不同的停用词替换为 ISet 类型参数,而不是使用标准 ENGLISH_STOP_WORDS_SET(第 134 行)。

我在这里阅读(http://webcache.googleusercontent.com/search?q=cache:sA-uyAC015UJ:our.umbraco.org/m%3Fmode%3Dtopic%26id%3D25600+&cd=2&hl=en&ct=clnk&gl=uk),您可以通过将以下行添加到 global.asax 中的 application_start 方法来让 Examine 使用一组空的停用词

Lucene.Net.Analysis.StopAnalyzer.ENGLISH_STOP_WORDS_SET = new System.Collections.Hashtable();

因此,有了一组空的停用词,您的月球人应该回来了。

有点奇怪的想法,但作为替代方案,您还可以将 StopAnalyzer 添加到 ExamineSettings.config 以创建仅包含停用词的文档索引,然后将它们与您的标准分析器结果集相结合?

于 2013-07-03T16:20:08.123 回答