elasticsearch server chapter5

23
Elasticsearch Server chapter5. 검색 결과 향상

Upload: choi-mun-gyu

Post on 13-Jan-2017

530 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Elasticsearch server Chapter5

Elasticsearch Serverchapter5. 검색 결과 향상

Page 2: Elasticsearch server Chapter5

개요• 아파치 루씬의 점수 계산

• elasticsearch가 제공하는 스크립트 기능

• 다양한 언어를 사용한 자료 색인과 검색

• 반환되는 다큐먼트의 점수에 영향을 미치는 다양한 질의 사용

• 색인 과정에서 중요도 사용

• 의미가 동일한 단어

• 특정 다큐먼트가 반환된 이유 점검

• 점수 계산과 관련한 세부사항 점검

Page 3: Elasticsearch server Chapter5

1. Apache Lucene scoring

• 점수는 질의에 대한 다큐먼트의 관련성의 수치

• 기본 아파치 루씬의 점수 계산 알고리즘은 TD/IDF(Term Frequency - Inverse Document Frequency)

• 다큐먼트가 동일 하더라도 질의를 할 때마다 계산 점수가 다르다

Page 4: Elasticsearch server Chapter5

Score properties• 다큐먼트 중요도(Document boost)

색인과정에서 다큐먼트에 주어진 중요도

• 필드 중요도(Field boost)

질의와 색인 과정에서 필드에 주어진 중요도

• 조정지수(Coord)

다큐먼트가 포함한 키워드 수에 기반한 값

• IDF(Inverse Document Frequency)

해당 키워드가 얼마나 드문지를 나타내는 값

• 길이기준(Length norm)

필드가 포함한 키워드 수에 기반. 필드가 길수록 작아진다.

• Term frequency

해당 키워드가 도큐먼트에 출현하는 빈도

Page 5: Elasticsearch server Chapter5

기본 점수 계산 공식

score(q,d)=coord(q,d)∗queryNorm(q)∗∑(tf (tind)∗idf (t)2 ∗boost(t)∗norm(t,d))

• 일치되는 키워드가 드물수록 다큐먼트 점수가 높아질 것이다.

• 다큐먼트 필드가 작을수록 다큐먼트 점수가 높아질 것이다.

• 필드에 대한 중요도가 높을수록 다큐먼트 점수가 높아질 것이다.

• ref : https://lucene.apache.org/core/4_0_0/core/org/apache/lucene/search/similarities/TFIDFSimilarity.html

Page 6: Elasticsearch server Chapter5

2. Scripting 기능

• elasticsearch는 스크립트작성을 위해 여러 언어를 지원

• 기본적으로 MVEL사용

• javascript, python, groovy지원

Page 7: Elasticsearch server Chapter5

3. 다양한 언어로 내용 검색

• 다국어 언어 자료에 대한 다양한 분석기를 선택 가능

• 언어에 종류에 상관없는 어간 추출 분석 제공

Page 8: Elasticsearch server Chapter5

여러 언어를 처리하기

• 여러 언어를 처리하는 방법

언어별로 나눠 다른 타입에 다큐먼트를 저장

언어별로 분리된 색인에 다큐먼트를 저장

단일 다큐먼트의 여러 필드에 언여벌로 저장

Page 9: Elasticsearch server Chapter5

여러 언어를 감지하기

• 언어 감지 라이브러리

• 아파치 티카(Apache Tika)

• 랭귀지 디텍션(Language detection)

• 텍스트가 길어질수록 언어 감지가 정확해진다.

Page 10: Elasticsearch server Chapter5

중요도로 점수에 영향을 미치기

• 질의 중요도

• 질의 시 query와 field에 중요도 설정

• 색인 시점의 중요도

• 색인 시점에 중요도 설정

• 질의와 독립적인 중요도 값을 가짐

Page 11: Elasticsearch server Chapter5

중요도를 질의에 추가

{ "query" : {

"prefix" : {

"title" : {

"value" : "cri",

"boost" : 3.0

}

}

}

}

Page 12: Elasticsearch server Chapter5

Demo - boost query

Page 13: Elasticsearch server Chapter5

중요도를 질의에 추가

{

"query": {

"constant_score": {

"query": {

"query_string": {

"query": "available:false author:heller"

}

}

}

}

}

Page 14: Elasticsearch server Chapter5

Demo - constant_score

Page 15: Elasticsearch server Chapter5

중요도를 색인시점에 추가

{ "title" : "The Complete Sherlock Holmes", "author" : "Arthur Conan Doyle", "year": 1936 }

Page 16: Elasticsearch server Chapter5

중요도를 색인시점에 추가

{ "title" : "The Complete Sherlock Holmes", "author" : { "_value" : "Arthur Conan Doyle", "_boost" : 10.0, }, "year": 1936 }

Page 17: Elasticsearch server Chapter5

6. 의미가 동일한 단어

• 하나의 단어를 검색, 의미가 동일하거나 유사한 단어 매칭

• 예를들어 crime검색 시 ‘Crime and Punishment’뿐만이 아니라, criminality나 abuse단어도동의어로 설정해 검색시 적용

• 동의어가 바뀔 때마다 자료 재색인 필요

Page 18: Elasticsearch server Chapter5

synonym필터

• analyzer에 synonym필터 적용

• 매핑에 synonym프로퍼티 추가

Page 19: Elasticsearch server Chapter5

허용되는 동의어 형식

• 명시적인 동의어

• criminality, wars => crime

• abuse => punishment

• 동의어 확장

• one, two, three => one, two, three

Page 20: Elasticsearch server Chapter5

7. 질의 해설 기능 이해

Analyze API(Testing Analyzers)

elasticsearch이 어떻게 tokenize하고

index에 어떻게 저장되는지 이해하기가 힘들다.

그래서 elasticsearch는 analyze API를 제공(디버깅용도)

참고 : https://www.elastic.co/guide/en/elasticsearch/guide/current/analysis-intro.html?q=_analy

Page 21: Elasticsearch server Chapter5

Demo - analyze API

Page 22: Elasticsearch server Chapter5

7. 질의 해설 기능 이해

Explain API

쿼리나 특정 도큐먼트가 어떻게 점수가 계산되어지는지

알아보는 기능 제공

참고 : https://www.elastic.co/guide/en/elasticsearch/reference/current/search-explain.html?q=_explain

Page 23: Elasticsearch server Chapter5

Demo - explain API