반응형
Recent Posts
Recent Comments
관리 메뉴

개발잡부

[es] _script sort 본문

ElasticStack/Elasticsearch

[es] _script sort

닉의네임 2022. 4. 8. 16:44
반응형

요구사항

1. 등록된 키워드가 입력되는 경우 미리 설정해 놓은 ranking 순서가 우선으로 반영되어야 한다

 2. 매칭되지 않은 문서에 대하여 기존 정렬 값 반영

 

구현설계 1

1. 기본 키워드, 추가키워드, 랭킹을 입력 받는다

2. 기본키워드 : keyword, 추가키워드: array, 랭킹: integer

3. 키워드가 포함된 문서를 검색 (filter - bool - should​) 등록된 랭킹으로 정렬 

 

문제발생

다른검색조건에 포함되어 검색될 경우 랭킹이 반영되는 문제 - 해당키워드가 분해되어 조건에 노출

 

해결 1

 

1. script filelds 로 키워드를 조회 하는 스크립트통해서 값을 변경

 

문제발생

script filelds 는 정렬이 되지 않음

 

해결 2

1. 스크립트에서 나온값으로 정렬 조건 추가

 

GET hyper-item/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "_script": {
        "type": "number",
        "order": "asc",
        "script": {
          "source": "if(doc['edlp.keyword'].size() > 0 && doc['edlp.keyword'].value == params['searchKeyword'] || (  doc['edlp.addKeyword'].size() > 0 && doc['edlp.addKeyword'].contains(params['searchKeyword']))) {return doc['edlp.ranking'].value; } else { return 100;}",
          "params": {
            "searchKeyword": "개발잡부시그니처생수"
          }
        }
      }
    }
  ]
}
반응형

'ElasticStack > Elasticsearch' 카테고리의 다른 글

[es] High level client for Java sort  (1) 2022.05.16
[es] 쿼리를 만들어 보자 4  (0) 2022.04.24
[es] script_fields  (0) 2022.04.08
[es] payload score  (0) 2022.02.20
[es] 자동완성 3  (0) 2022.02.06
Comments