일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- flask
- Elasticsearch
- docker
- licence delete curl
- 파이썬
- analyzer test
- matplotlib
- high level client
- Python
- ELASTIC
- 차트
- license delete
- MySQL
- token filter test
- aggs
- plugin
- springboot
- zip 암호화
- API
- Kafka
- zip 파일 암호화
- License
- query
- sort
- 900gle
- TensorFlow
- Test
- Mac
- Java
- aggregation
Archives
- Today
- Total
개발잡부
[900gle] Java High Level REST Client Query 2 본문
반응형
하.. 자바.. 진짜.. 어휴.. 이거 3일동안 삽질하게 만드네..
내가 원하는 구조는
function_score 하위에 query 와 , 다수의 functions로 랭킹을 조절하는 거였음
아래의 파이썬 코드를 Java 로 바꿀려고 하니.. 뭔넘의 타입이..
script_query = {
"function_score": {
"query": {
"multi_match": {
"query": query,
"fields": [
"name^5",
"category"
]
}
},
"functions": [
{
"script_score": {
"script": {
"source": "cosineSimilarity(params.query_vector, 'feature_vector') * doc['weight'].value * doc['populr'].value / doc['name'].length + doc['category'].length",
"params": {
"query_vector": query_vector
}
}
},
"weight": 1
}
]
}
}
아래의 High level client .. Java 코드로 결과를 출력하면
FunctionScoreQueryBuilder functionScoreQueryBuilder = new FunctionScoreQueryBuilder(
QueryBuilders.multiMatchQuery(searchWord, "name", "category"),
new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
new ScriptScoreFunctionBuilder(
new Script(
ScriptType.INLINE,
Script.DEFAULT_SCRIPT_LANG,
"cosineSimilarity(params.query_vector, 'feature_vector') * doc['weight'].value * doc['populr'].value / doc['name'].length + doc['category'].length",
map)
)
)
}
);
결과 출력
얼추 비슷하게 나옴.. 집에가서 테스트 해봐야지..
{
"function_score" : {
"query" : {
"multi_match" : {
"query" : "나이키",
"fields" : [
"category^1.0",
"name^1.0"
],
"type" : "best_fields",
"operator" : "OR",
"slop" : 0,
"prefix_length" : 0,
"max_expansions" : 50,
"zero_terms_query" : "NONE",
"auto_generate_synonyms_phrase_query" : true,
"fuzzy_transpositions" : true,
"boost" : 1.0
}
},
"functions" : [
{
"filter" : {
"match_all" : {
"boost" : 1.0
}
},
"script_score" : {
"script" : {
"source" : "cosineSimilarity(params.query_vector, 'feature_vector') * doc['weight'].value * doc['populr'].value / doc['name'].length + doc['category'].length",
"lang" : "painless",
"params" : {
"query_vector" : [
-0.1213123
]
}
}
}
}
],
"score_mode" : "multiply",
"max_boost" : 3.4028235E38,
"boost" : 1.0
}
}
문제발생
필드의 길이값을 가져오는 부분을 .keyword 타입으로 맵핑해줘야 겠음
fielddata:true 이것도 될 것 같기도한데.. 메모리 사용 이슈를 확인해봐야함
반응형
'900gle shopping > api' 카테고리의 다른 글
[900] Java High Level REST Client Query 3 (0) | 2022.01.27 |
---|---|
[900gle] Search Template (0) | 2022.01.25 |
[900] Java High Level REST Client Query (0) | 2022.01.24 |
[900] Search API (0) | 2022.01.19 |
[900gle] Text embedding API (0) | 2022.01.19 |
Comments