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 검색 : 복잡한 검색에 주로 사용
q |
쿼리 스트링 |
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 : 집계, 최소, 최대, 합 ,평균 등...
'[정리] 데이터베이스 > [NoSQL] ElasticSearch' 카테고리의 다른 글
[2019.03.24] 엘라스틱 서치 스프링 연동 방법 정리 (0) | 2019.03.24 |
---|---|
[2019.03.14] 엘라스틱 서치 (클러스터 설정 방법, 플러그인) (0) | 2019.03.14 |
[2019.03.14] 엘라스틱 서치 강의 정리 (0) | 2019.03.14 |
[2019.03.07] Elastic search (logstash) (0) | 2019.03.07 |
[2019.03.06] Elastic search (Kibana) (0) | 2019.03.06 |