2014-07-14 3 views
0

Lucene.net으로 필터를 추가하는 코드가 있지만 좋은 설명은 코드를 이해하지 못했습니다. 그래서 여기에 설명을위한 코드를 붙여 넣습니다.Lucene.net 필터 작동 방법

List<SearchResults> Searchresults = new List<SearchResults>(); 

     string indexFileLocation = @"C:\o"; 
     Lucene.Net.Store.Directory dir =  Lucene.Net.Store.FSDirectory.GetDirectory(indexFileLocation); 

     string[] searchfields = new string[] { "fname", "lname", "dob", "id"}; 
     IndexSearcher indexSearcher = new IndexSearcher(dir); 

     Filter fil= new QueryWrapperFilter(new TermQuery(new Term(field, "5/12/1998"))); 
     var hits = indexSearcher.Search(QueryMaker(searchString, searchfields), fil); 

     for (int i = 0; i < hits.Length(); i++) 
     { 
      SearchResults result = new SearchResults(); 
      result.fname = hits.Doc(i).GetField("fname").StringValue(); 
      result.lname = hits.Doc(i).GetField("lname").StringValue(); 
      result.dob = hits.Doc(i).GetField("dob").StringValue(); 
      result.id = hits.Doc(i).GetField("id").StringValue(); 
      Searchresults.Add(result); 

     } 

는 난 그냥 처음 루씬 검색 & 모든 데이터를 끌어와 후 필터 또는 필터를 기반으로 시작 루씬 풀 데이터에서 구현 알고 싶은 두 개의 라인

Filter fil= new QueryWrapperFilter(new TermQuery(new Term(field, "5/12/1998"))); 
    var hits = indexSearcher.Search(QueryMaker(searchString, searchfields), fil); 

아래에 대한 설명이 필요? 안내해주십시오. 감사.

+0

Lucene은 처음 실행했을 때 모든 항목에 대해 색인을 생성합니다. 그래서 생성 된 데이터 파일에서 해당 줄이 필터링되므로 모든 데이터가 이미 있으므로 다시 가져 오는 것이 아니라 쿼리를 사용하여 이미 색인 된 정보를 필터링합니다. –

답변

1
난 그냥 처음 루씬 검색을 & 풀의 모든 데이터를 알고 후 필터 또는 필터를 기반으로 시작 루씬 풀 데이터에서 구현하고자

? 안내해주십시오. 감사.

Lucene.Net은 검색을 수행하고 필터링 된 쿼리를 수행 한 후 결과를 "병합"합니다. 그 이유는 필터링 된 쿼리를 캐시하는 것입니다. 검색 쿼리보다 다음에 히트 가능성이 더 높기 때문입니다.

+0

ru lucene이 데이터를 가져오고 결과를 가져온 후 가져 오기 결과 집합에 필터를 적용한다고 말하려합니다. 나는 옳은가 틀린가? 가능하다면 예를 들어 설명해보십시오. 내가 말하려고하는 것을 시각화 할 수 있습니다. 덕분에 – Thomas

+0

@ 토마스, lucene은 당신이하고있는 검색 (name = test)과 함께 문서 ID를 가져오고 그 후에 날짜 (예 :)가 5/12/1998 인 문서 ID를 가져올 것이고 그 후에 그것은 갈 것입니다 모든 결과 집합에 적용하고 날짜 = 5/12/1998을 name = test로 갖는자를 수집합니다. –