2013-06-09 1 views
2

검색하고하는 가장 좋은 방법은 무엇입니까 색인 Lucene.NET 결과가 밖으로 다음과 같은 방법으로 주문 와서 그래서 3.0 : (하나의 단어로) 전체 쿼리 텍스트로 시작
Lucene.NET 3.0을 사용하여 startsWith 및 Contains Search를 수행하는 방법은 무엇입니까?

  1. 결과 예를 들어, "Bar Acme"
  2. 검색어가 단어 조각으로 시작되는 결과. "Bart Simpson"
  3. 쿼리 텍스트가 전체 단어로 포함 된 결과. "National Bar Association"
  4. 쿼리 텍스트가 조각으로 포함 된 결과. "미국 바텐더 Inc의"

예 :

  1. 바 한국 전기
  2. 바 음력
  3. 바트 심슨
  4. 국립 변호사 협회
  5. :

    정렬 된 결과 바

    검색
  6. 국제 바텐더 협회

답변

1

Lucene은 일반적으로 필드 내의 위치에 따라 검색/채점을 지원하지 않습니다. 모든 필드 앞에 몇 가지 알려진 필드 시작 구분 기호를 붙이면 해당 필드를 지원할 수 있습니다. 텍스트 필드 내의 위치가 관련이없는 전체 텍스트 검색의 렌즈 (즉, 문서에서 막대를 검색하는 경우 "바트 (Bart) 심슨 "은"National Bar Association "이전에 반환 됨)

단순한 프리픽스 검색은 다른 모든 것을 처리합니다. 따라서 단순히 단어 토큰의 시작 부분을 추가하는 경우 원본보다 높은 부울 접두사 쿼리를 사용하여 수정 된 용어를 검색 할 수 있습니다. 그러면 설명하는 것과 정확히 일치해야합니다.

1

linq으로 달성 할 수 있습니다. 히트 카운트 Int32.MaxValue로 lucene 검색을하십시오. ScoreDocs의 결과를 반복하여 Collection Searchresults에 저장합니다.

Searchresults = (결과에서 scoreDoc.ScoreDocs에서 (새 SearchResults {suggestion = searcher.Doc (scoreDoc.Doc) .Get (제안 ")})).) OrderBy (x => x.suggestion) .ToList();

검색 결과 검색 결과 (x => x.suggestion.ToLower(). StartsWith (searchStringLinq.ToLower())). (10) .ToList();

if (SearchresultsStartswith.Count> 0) return SearchresultsStartswith.ToList(); else return 검색 결과 .take (10) .ToList();

관련 문제