2019. 3. 24. 04:43ㆍ[공부] 독서/실무 예제 Elasticsearch 검색엔진 기본
프로젝션
쿼리를 통해 문서에서 가져올 필드 지정
모든 쿼리에 적용 가능. SQL의 프로젝션과 같음
{ "query" : { "match_all" : { } }, "fields" : ["myName", "myJob"] } |
페이징
검색엔진 특성상 페이지 네비게이션에 특화되어 있지 않아서 잘못하면 검색 성능 저하와 연결됨
{ "query" : { "match_all" : { } }, "from" : 0, "size" : 10 } |
필터링
필터링 결과 내의 재검색, 이미 검색된 문서들에 대해서는 score 계싼을 하지 않으므로 성능 향상을 도모할 수 있다.
가능하면 필터링은 score 연산이 필요하지 않은 쿼리를 사용하는 것이 좋다.
{ "query" : { "match_all" : { } }, "filter" : { "bool" : { "must" : [ {"terms" : {"myJob" : "developer"}} ] } } } |
정렬
기본적으로 score 정렬
{ "query" : { "match_all" : { } }, "sort" : [{ {"myBalance" : {"order" : "desc"} }], "track_scores" : true # score 계산을 null 로 반환되는 것을 방지하기 위하여 sort 시 반드시 true 로 설정한다. } |
패싯 (그룹)
패싯 필드는 반드시 not_analyzed로 지정되어 있어야한다.
{ "query" : { "match_all" : { } }, "facets" : { "bool" : { "must" : [ {"terms" : {"myJob" : "developer"}} ] } } } |
Term 부스팅
검색하는 특정 데이터 Term에 높은 가중치를 두는 방법
{ "query" : { "bool" : { "should" : [{ "query_string" : { "default_field" : "myDescription" "query" : "developer^2 and designer" } }] } } } |
Field 부스팅
검색하는 특정 데이터 Term에 높은 가중치를 두는 방법
{ "query" : { "bool" : { "must" : [ { "terms" : { "myDescription" : "person" } } ], "should" : [ { "terms" : { "myJob" : "developer" "boost" : 2 } } ] } } } |
하이라이팅
패싯 필드는 반드시 not_analyzed로 지정되어 있어야한다.
myJob이 developer인 문서들의 myName 필드를 앞뒤로 <strong> 태그를 붙여서 강조해달라
{ "query" : { "terms" : { "myJob" : "developer" } }, "highlight" : { "fields" : { "myName" : { "pre_tags" : ["<strong>"], "post_tags" : ["</strong>"] } } } } |
'[공부] 독서 > 실무 예제 Elasticsearch 검색엔진 기본' 카테고리의 다른 글
Elastic search 실전 기본 (검색 응답, 검색 방법) (0) | 2019.03.24 |
---|---|
Elastic search 실전 기본 (인덱스 스키마 설정) (0) | 2019.03.24 |
Elastic search 실전 기본 (용어, 설정, API) (0) | 2019.03.24 |