미미 코딩

검색 엔진 본문

초보 개발자

검색 엔진

부자는나야나 2020. 6. 20. 20:35

 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")); 

}

 

Comments