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
Recommended