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": "개발잡부시그니처생수"
}
}
}
}
]
}
반응형