[Lucene4.8 튜토리얼의 3] 검색.

3579 단어 Lucene
1. 핵심 클래스
Lucene이 검색하는 동안 다루는 주요 클래스는 다음과 같습니다.
(1) IndexSearcher: 검색 () 방법을 실행하는 클래스
(2) IndexReader: 색인 파일을 읽고 검색 인터페이스를 제공합니다.
(3)Query 및 하위 클래스: 조회 대상, 검색 () 방법의 중요한 매개 변수
(4) QueryParser: 사용자가 입력한 검색 용어에 따라 Query 객체를 생성합니다.
(5) TopDocs:search() 메서드가 반환한 이전 n 문서
(6) ScoreDocs: TopDocs의 검색 결과에 대한 액세스 인터페이스를 제공합니다.
2. 검색의 핵심 단계
(1) IndexReader 작성
(2) IndexReader를 사용하여 IndexSearcher 작성
(3) 검색 키워드에 따라 QueryParser를 사용하여 Query 객체 생성
(4) Query를 매개 변수로 IndexSearcher를 호출합니다.검색 (), 검색 실행
(5) TopDocs와 ScoreDocs로 결과를 옮겨다니며 처리
예제 코드는 다음과 같습니다.
//(1) IndexReader
Directory indexDir2 = FSDirectory.open(indexDir);
IndexReader ir = DirectoryReader.open(indexDir2);
//(2) IndexReader IndexSearcher
IndexSearcher searcher = new IndexSearcher(ir);
//(3) , QueryParser Query 
QueryParser parser = new QueryParser(Version.LUCENE_48, "contents",new SimpleAnalyzer(Version.LUCENE_48));
Query query = null;
try {
	query = parser.parse(term);
	} catch (ParseException e) {
		e.printStackTrace();
	}
//(4) Query IndexSearcher.search(), 
TopDocs docs = searcher.search(query, 30);		

//(5) TopDocs ScoreDocs 
ScoreDoc[] hits = docs.scoreDocs;
System.out.println(hits.length);
for (ScoreDoc hit : hits) {
			System.out.println("doc: " + hit.doc + " score: " + hit.score);
		}
3. IndexReader 정보
(1) IndexReader는 구조 함수를 제공하지 않기 때문에 DirectoryReader를 통과해야 합니다.open () 방법으로 IndexReader를 만듭니다.
(2) 인덱스 리더를 만드는 데는 시스템 비용이 많이 들기 때문에 모든 검색 기간에 인덱스 리더를 반복해서 사용하는 것이 좋습니다. 필요할 때만 새로운 인덱스 리더를 켜는 것을 권장합니다.
(3) Index Reader를 만들 때 기존의 인덱스 스냅샷을 검색합니다. 인덱스에 변경된 정보를 검색하려면 새로운reader를 열어야 합니다.다행히 인덱스 리더입니다.reopen 방법은 새 Index Reader를 가져오는 효과적인 방법으로 시스템 자원을 적게 소모하는 상황에서 현재reader를 사용하여 색인에 있는 모든 변경 정보를 얻을 수 있습니다.[새 버전에서 폐기되었으니 대체 방법을 확인해야 합니다.]
4、QueryParser와Query의 하위 클래스 정보
검색의 핵심문은 다음과 같습니다.
searcher.search(query, 10);
이때 가장 중요한 매개 변수는 Qeury 대상이다.Query 대상을 구성하는 데는 두 가지 방법이 있다. [모두 콘텐츠 영역에서 자바 키워드를 검색하는 것을 예로 들면]
(1) BooleanQuery,ConstantScoreQuery,DisjunctionMaxQuery,FilteredQuery,MatchAllDocsQuery,MultiphraseQuery,MultiTermQuery,PhraseQuery,SpanQuery,TermQuery를 사용하여 대외적으로 직접 실례화:
searcher.search( new TermQuery(new Term("contents","java")), 10);
아래 문장의 구조가 더욱 뚜렷하다
Term term= new Term("contents","java");
TermQuery tq = new TermQuery(term);
searcher.search(tq , 10);
또한 콘텐츠 영역에서 자바를 포함한 문서를 검색하기 위한 것입니다.
(2)QueryParser의parse() 방법을 사용하여 입력한 검색 키워드를 설명하고query 대상을 되돌려줍니다.
QueryParser parser = new QueryParser(Version.LUCENE_48, "contents",new SimpleAnalyzer(Version.LUCENE_48));
Query query = null;
try {
	query = parser.parse("java");
} catch (ParseException e) {
	e.printStackTrace();
}
TopDocs docs = searcher.search(query, 10);
상기 문장에 QueryParser를 만들고 기본 검색 영역은 contents이며 검색 어휘를Query 대상으로 바꿉니다.
QueryParser의 기본 검색 도메인이 모두 인 경우어떻게 Query의 검색 영역을 지정합니까?
QueryParser 및 Query 하위 클래스에 대한 자세한 내용은 를 참조하십시오.
【Lucene4.8 강좌의 6】QueryParser와Query 서브클래스:Query 대상을 어떻게 생성하는가http://blog.csdn.net/jediael_lu/article/details/33288793

좋은 웹페이지 즐겨찾기