2. 개요
• 아파치 루씬의 점수 계산
• elasticsearch가 제공하는 스크립트 기능
• 다양한 언어를 사용한 자료 색인과 검색
• 반환되는 다큐먼트의 점수에 영향을 미치는 다양한 질의 사용
• 색인 과정에서 중요도 사용
• 의미가 동일한 단어
• 특정 다큐먼트가 반환된 이유 점검
• 점수 계산과 관련한 세부사항 점검
3. 1. Apache Lucene scoring
• 점수는 질의에 대한 다큐먼트의 관련성의 수치
• 기본 아파치 루씬의 점수 계산 알고리즘은 TD/IDF
(Term Frequency - Inverse Document Frequency)
• 다큐먼트가 동일 하더라도
질의를 할 때마다 계산 점수가 다르다
4. Score properties
• 다큐먼트 중요도(Document boost)
색인과정에서 다큐먼트에 주어진 중요도
• 필드 중요도(Field boost)
질의와 색인 과정에서 필드에 주어진 중요도
• 조정지수(Coord)
다큐먼트가 포함한 키워드 수에 기반한 값
• IDF(Inverse Document Frequency)
해당 키워드가 얼마나 드문지를 나타내는 값
• 길이기준(Length norm)
필드가 포함한 키워드 수에 기반. 필드가 길수록 작아진다.
• Term frequency
해당 키워드가 도큐먼트에 출현하는 빈도
5. 기본 점수 계산 공식
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
6. 2. Scripting 기능
• elasticsearch는 스크립트작성을 위해 여러 언어를 지원
• 기본적으로 MVEL사용
• javascript, python, groovy지원
7. 3. 다양한 언어로 내용 검색
• 다국어 언어 자료에 대한 다양한 분석기를 선택 가능
• 언어에 종류에 상관없는 어간 추출 분석 제공
8. 여러 언어를 처리하기
• 여러 언어를 처리하는 방법
언어별로 나눠 다른 타입에 다큐먼트를 저장
언어별로 분리된 색인에 다큐먼트를 저장
단일 다큐먼트의 여러 필드에 언여벌로 저장
9. 여러 언어를 감지하기
• 언어 감지 라이브러리
• 아파치 티카(Apache Tika)
• 랭귀지 디텍션(Language detection)
• 텍스트가 길어질수록 언어 감지가 정확해진다.
10. 중요도로 점수에 영향을 미치기
• 질의 중요도
• 질의 시 query와 field에 중요도 설정
• 색인 시점의 중요도
• 색인 시점에 중요도 설정
• 질의와 독립적인 중요도 값을 가짐
15. 중요도를 색인시점에 추가
{
"title" : "The Complete Sherlock Holmes",
"author" : "Arthur Conan Doyle",
"year": 1936
}
16. 중요도를 색인시점에 추가
{
"title" : "The Complete Sherlock Holmes",
"author" : {
"_value" : "Arthur Conan Doyle",
"_boost" : 10.0,
},
"year": 1936
}
17. 6. 의미가 동일한 단어
• 하나의 단어를 검색, 의미가 동일하거나 유사한 단어 매칭
• 예를들어 crime검색 시 ‘Crime and Punishment’
뿐만이 아니라, criminality나 abuse단어도
동의어로 설정해 검색시 적용
• 동의어가 바뀔 때마다 자료 재색인 필요
19. 허용되는 동의어 형식
• 명시적인 동의어
• criminality, wars => crime
• abuse => punishment
• 동의어 확장
• one, two, three => one, two, three
20. 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
22. 7. 질의 해설 기능 이해
Explain API
쿼리나 특정 도큐먼트가 어떻게 점수가 계산되어지는지
알아보는 기능 제공
참고 : https://www.elastic.co/guide/en/elasticsearch/reference/current/search-explain.html?q=_explain