일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- analyzer test
- Java
- Test
- aggregation
- sort
- API
- ELASTIC
- Python
- License
- 파이썬
- Kafka
- matplotlib
- docker
- TensorFlow
- token filter test
- 차트
- plugin
- 900gle
- query
- MySQL
- aggs
- Elasticsearch
- springboot
- high level client
- zip 암호화
- license delete
- licence delete curl
- Mac
- flask
- zip 파일 암호화
Archives
- Today
- Total
개발잡부
[es] _script sort 본문
반응형
요구사항
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