미미 코딩
검색 엔진 본문
searching (검색) ‘
색인에 들어있는 토큰을 기준으로 해당 토큰이 포함된 문서를 찾아내 우선순위를 부여 하는(ranking) 과정
사용자의 검색어 입력 → 검색 질의 생성 → 질의 검색 → 결과 출력
[ 1. 검색 질의 생성 ] ’
전달 받은 검색어를 엔진에서 인식하는 Query객체로 변환하는 과정
-
Analyzer
어떻게 term(단어들)들로 쪼개야 할지에 대해 제어하는 클래스 -
QueryParser
사람이 직접 입력하고 사람이 한눈에 알아볼 수 있는 텍스트 형태의 질의를 분석해 루씬 Query 객체로 변환 -
Query
검색어를 지정할 때 사용. 실제 Query 하위 클래스에서 특정 질의 기능을 구현, IndexSearcher의 search 메소드에 Query 객체를 직접 인자로 넘겨줄 수 있음
Analyzer analyzer = new StandardAnalyzer(); //CJKAnalyzer - 한글에서 가장 많이 사용하는 분석기
QueryParser parser = new QueryParser(“fieldName”, analyzer);
Query query = parser.parse(“검색어”);
[ 2. 질의 검색 ] ’
-
IndexSearcher
IndexWriter 로 생성한 색인에서 Document 를 검색하는 클래스
색인을 검색(접근) 기능을 담당하는 클래스 (read-only) -
TopScoreDocCollector
최고 득점을 수집하여로 반환 하는 클래스 -
TopDocs : IndexSearcher.search 메소드에서 검색한 결과 중 연관도 점수가 가장 높은 결과 문서를 담든 클래스
-
ScoreDoc
TopDocs 클래스에 담긴 검색 결과 하나를 나타내는 클래스
IndexReader reader = DirectoryReader.open(index);
IndexSearcher indexSearcher = new IndexSearcher(reader);
TopScoreDocCollector collector = TopScoreDocCollector.create(10);
indexSearcher.search(query, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;
[ 3. 검색 결과 출력 ]
검색결과로 반환된 Document객체를 사용자가 직관적으로 알아보기 좋게 구성하여 화면에 출력
-
Query를 통해 검색한 결과는 Hits로 수집될 수 있다.
Hits는 결과 문서의 본문 내용을 모두 포함하지 않으며, 결과 문서에 대한 ID 목록만 갖는다
for (int i = 0; i < hits.length; ++i) {
int docId = hits[i].doc;
Document d = searcher.doc(docId);
searchList.add(d.get("title"));
}
'초보 개발자' 카테고리의 다른 글
[HTML/CSS] html이란?, inline 요소, block 요소, Box Model (0) | 2020.06.28 |
---|---|
데이터베이스 설계 및 구현 - (1) 데이터베이스의 이해 (0) | 2020.06.24 |
JPA 란? (0) | 2020.06.23 |
파일 처리 시스템 특징 (0) | 2020.06.21 |
JPA (+ Spring Framework / Mysql ) 설정 (0) | 2020.06.19 |