2014-07-10 5 views
0

팀,열 Lucene.NET으로 검색하는 동안 우선 순위

다음과 같이 6 개의 인덱싱 된 열을 검색 할 수 있습니다.

  1. 이름
  2. 설명
  3. SKU
  4. 카테고리
  5. 가격
  6. SearchCriteria 이제

, 나는 나머지 먼저 "SearchCritera" 열을 검색을 수행 할 필요가 검색하는 동안 기둥들.

짧은 - 일치하는 제품은 "SearchCritera" shold가 검색 결과 상단에 표시됩니다.

var parser = new MultiFieldQueryParser(Version.LUCENE_30, 
    new[] { "SearchCriteria", 
     "Name", 
     "Description", 
     "SKU", 
     "Category", 
     "Price" 
    }, analyzer); 
var query = parseQuery(searchQuery, parser); 

var finalQuery = new BooleanQuery(); 
finalQuery.Add(parser.Parse(searchQuery), Occur.SHOULD); 

var hits = searcher.Search(finalQuery, null, hits_limit, Sort.RELEVANCE); 

답변

5

두 가지 방법이 있습니다.

강화 필드를 사용하는 첫 번째 방법 :

 Field name = new Field("Name", strName, Field.Store.NO, Field.Index.ANALYZED); 
     name.Boost = 1; 

     Field searchCriteria = new Field("SearchCriteria", strSearchCriteria, Field.Store.NO, Field.Index.ANALYZED); 
     searchCriteria.Boost = 2; 

     doc.Add(name); 
     doc.Add(searchCriteria); 

이 방법은 SearchCriteria 필드에 용어의 점수가 두 배로됩니다

색인 설정 우선 순위에 의해 필드에 부스트 동안 이름 필드에 용어 점수를 매기십시오.

이 방법은 SearchCriteria가 항상 Name보다 중요 할 때 유용합니다.

두 번째 방법은 검색 동안 밀어 MultiFieldQueryParser을 사용하는 것입니다 : 당신은이 응용 프로그램의 일부 시나리오에서만 작업을 강화하려는 경우

Dictionary<string,float> boosts = new Dictionary<string,float>(); 
     boosts.Add("SearchCriteria",2); 
     boosts.Add("Name",1); 

     MultiFieldQueryParser parser = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_30new[], new[] { "SearchCriteria", "Name"}, analyzer, boosts); 

이 방법이 더 좋습니다.

부스터 번호가 사용자의 요구 (원하는 우선 순위의 민감도)에 적합한 지 확인하고 필요에 따라 변경해야하는지 확인해야합니다.

는 예를 짧게 만들 읽을 나는 단지 2 당신의 필드를 사용하지만 당신은 ... 저주 그들을

+1

감사의 답장을 많이 모두를 사용해야합니다. 나는 시험 후에 당신을 되돌릴 것이다 :) – dLcreations