2013-07-03 1 views
1

검색 단어를 제거 검토하고 나는까지 검토하고 내 쿼리 단어는 예를 들어내가 umbraco을 사용하고

을 제거하는 데있다 그러나 실행 : 나는에 "달에 사람이"를 검색하고

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

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

그러나, 쿼리 내가 디버깅 할 때이 같이 생성됩니다 :

{ SearchIndexType: , LuceneQuery: +Name:"man moon" } 
다음 코드 줄은 변수 "SEARCHTERM"는 "달에 사람을"포함해야

searchTerm에서 "on"이라는 단어가 어떻게 제거되었는지 유의하십시오.

아마도 이것은 STOP/예약어로 간주되기 때문입니다. 그러나 이것은 내가 예상 한 검색 결과를 얻지 못함을 의미합니다.

어떻게이 문제를 해결할 수 있습니까?

답변

2

내부적으로 StopAnalyzer 클래스는 표준 인덱싱 프로세스의 일부로 StandardAnalyzer에서 사용됩니다. StopAnalyzer (http://lucenenet.apache.org/docs/3.0.3/d7/df5/_stop_analyzer_8cs_source.html#l00054)에는 표준 ENGLISH_STOP_WORDS_SET (134 행)을 사용하는 대신 다른 유형의 중지 단어 집합을 ISet 유형 매개 변수로 대체 할 수있는 방법이 포함되어 있습니다.

그리고 여기 읽기는 불용어의 빈 세트

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

지금의 Global.asax에 위해 Application_Start 메서드에 다음 줄을 추가하여 중지 단어의 빈 세트를 사용하여 검사받을 수 있습니다 (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) 달에있는 당신의 남자가 돌아와야합니다.

다소 이상한 아이디어 일 수도 있지만 대안으로 StopAnalyzer를 ExamineSettings.config에 추가하여 중지 단어 만있는 문서의 색인을 만든 다음 표준 분석기 결과 집합과 AND로 지정할 수 있습니까?