kok202
Elastic search 실전 기본 (쿼리 추가 기능)

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>"]

}

}

}

}