检查剥离搜索词

时间:2013-07-03 12:56:12

标签: search umbraco lucene.net

我正在使用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 /保留字。但是,这意味着我没有得到我期望的搜索结果。

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

1 个答案:

答案 0 :(得分: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方法中添加以下行来检查使用一组空的停用词

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

因此,如果有一套空的停顿词,那么月球上的男人应该回来了。

有点奇怪的想法,但作为替代方案,你也可以在ExamineSettings.config中添加一个StopAnalyzer来创建只包含停用词的docs索引,然后用标准分析器结果集对它们进行AND运算?