kok202
[2019.03.14] 엘라스틱 서치 (Mapping, 검색 detail)

2019. 3. 14. 18:25[정리] 데이터베이스/[NoSQL] ElasticSearch

 type 

 엘라스틱 서치에서 제공하는 타입

 Index

 analyzed

 인덱싱 함

 not_analyzed

 인덱싱 하지만 분석 안함

 no

 인덱싱 안함

 store

 yes

 원본 값을 저장함
 no 원본 값을 저장안함

 boot

 필드의 가중값

 10이면 이 필드는 검색할 때 다른 필드보다 10배 중요하다. (랭킹시)

 analyzer

 분석에 사용할 분석기 정의

 copy_to

 모든 값을 복사할 필드 정의






앨라스틱 서치의 검색 방법

1. URI 요청 검색 : 간단한 테스트용 검색만 주로 사용

2. QueryDSL 검색 : 복잡한 검색에 주로 사용


 

 쿼리 스트링

 default_operator 

 검색 조건에 사용하는 기본 연산자

 field

 검색 결과로 가져올 필드 

 sort 

 정렬 방법 ex) fieldName:asc 또는 fieldName:desc 

 timeout 

 검색 수행 타임아웃 값

 form

 가져올 결과의 시작 지정 

 size

 가져올 결과의 갯수


form + size로 페이징을 구현한다.

 { 

"query": { 

"bool": { 

"must": [ { "match": { "age": "40" } } ], 

"must_not": [ { "match": { "state": "ID" } } ]

 } 

 }

 }






filter 검색

 {

"query" : {

 "filtered" : {

 "match" : { "title" : "냉장고" }

}

 },{ 

 "filter" : {

 "term": { "company":"삼성" }

}

 }

 }


타이틀이 냉장고라는 겸색 결과중에 회사가 삼성인 것으로 필터링한다.

검색 쿼리와 마찬가지로 검색을 하는 것은 같지만 랭킹에 영향을 주지 않는다.

캐싱이 된다.

필터에 사용할 수 있는 것들

range

term

regexp

bool...






루씬에서 기본 검색 점수를 계산하는 방법

키워드와 문서가 있을 때 'Java'라는 키워드가 있다고 하자

'Java'라는 키워드를 많이 언급하는 문서가 있다면 이는 매우 높은 상관관계일 것이다.

그런데 이렇게 점수를 측정하면 'the' 와 같이 흔하게 나오는 단어는 점수가 줄어야 한다.




수식상세 : http://lucene.apache.org/core/4_5_0/core/org/apache/lucene/search/similarities/TFIDFSimilarity.html

수식의 의미

1. 키워드 일치도 : 키워드가 많이 일치할수록 문서 점수가 높다. (Term Frequency)

2. 키워드 빈도 : 일치하는 키워드의 출현 빈도가 낮을수록 문서 점수가 높다. (Inverse Document Frequency)

3. 문서 길이 : 문서 길이가 짧을수록 문서 점수가 높다.(Length Norm)

4. 중요도 : 문서, 필드의 중요도 (boot)가 높을수록 문서 점수가 높다. (ex. 제목 = 10, 부제목 = 5, 본문 = 2)






멀티 테넌시

쉼표를 사용해서 n 개의 인덱스를 동시에 검색할 수 있다.

curl -XGET 'http://localhost:9200/books/book1,book2/tomcat,apache/_search?q=host:host2'

Facet : 검색된 문서가 몇건인지 계산하는것

Aggregation : 집계, 최소, 최대, 합 ,평균 등...