elasticsearch server chapter5

Post on 13-Jan-2017

530 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Elasticsearch Serverchapter5. 검색 결과 향상

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

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

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

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

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

• 의미가 동일한 단어

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

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

1. Apache Lucene scoring

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

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

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

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

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

• 필드 중요도(Field boost)

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

• 조정지수(Coord)

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

• IDF(Inverse Document Frequency)

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

• 길이기준(Length norm)

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

• Term frequency

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

기본 점수 계산 공식

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

2. Scripting 기능

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

• 기본적으로 MVEL사용

• javascript, python, groovy지원

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

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

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

여러 언어를 처리하기

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

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

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

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

여러 언어를 감지하기

• 언어 감지 라이브러리

• 아파치 티카(Apache Tika)

• 랭귀지 디텍션(Language detection)

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

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

• 질의 중요도

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

• 색인 시점의 중요도

• 색인 시점에 중요도 설정

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

중요도를 질의에 추가

{ "query" : {

"prefix" : {

"title" : {

"value" : "cri",

"boost" : 3.0

}

}

}

}

Demo - boost query

중요도를 질의에 추가

{

"query": {

"constant_score": {

"query": {

"query_string": {

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

}

}

}

}

}

Demo - constant_score

중요도를 색인시점에 추가

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

중요도를 색인시점에 추가

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

6. 의미가 동일한 단어

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

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

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

synonym필터

• analyzer에 synonym필터 적용

• 매핑에 synonym프로퍼티 추가

허용되는 동의어 형식

• 명시적인 동의어

• criminality, wars => crime

• abuse => punishment

• 동의어 확장

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

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

Demo - analyze API

7. 질의 해설 기능 이해

Explain API

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

알아보는 기능 제공

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

Demo - explain API

top related