2
신축성이 있습니다. function_score를 사용하여 점수를 사용자 지정합니다. 여기 내 코드는 다음과 같습니다.script_score는 lang groovy를 사용하여 elastic 1.3에서 0을 반환합니다.
body = {
"from" : product_per_page*page,
"size" : product_per_page,
"query": {
"function_score": {
"query": {
"bool":{
"must": [
{
"range": {
"price": {
"gte": from_price,
"lte": to_price
}
}
}, {
"match":{
"text": {
"query": query,
}
},
}
]
},
},
"script_score": {
"script": "floor(_score)*doc['boost'].value",
"lang":"groovy"
},
"boost_mode": "replace",
},
}
}
점수는 항상 0.0을 반환합니다. I가 스크립트를 설정하면 는 :
"script": "_score"
는 0.98977035 같은 정확한 점수 (0.0과 1.0 사이의 숫자)를 반환합니다.
"script": "_score + 0.0001"
다시 올바른 것으로 반환됩니다. 하지만 이것을 사용했을 때
는"script": "_score + 1"
그것을 반환 1.0 :
"script": "_score *10"
되돌아 0.0 (및 함수 I는 "script": "floor(_score)"
되돌아 0.0 사용). 또한 :
"script": "32"
을하고 (I 예상대로) 32 리턴
"script": "doc['boost'].value"
되돌아 0.0 I는 시도
. (문서 [ '부스트'] 값은 100, 10 사이) .so 문제는 그루비야. 숫자가 클 경우 0.0으로 반올림됩니다. 나는 어떻게해야합니까? 감사합니다.
'floor (_score)'를 실행하면'0.98977035'가 0으로 표시되고 0이 0이면 0이됩니다. –
그냥 예일뿐입니다! 하지만 당신 말이 맞아요! 나는 "script": "ceil (_score)"'및 다른 함수를 시도했지만 결과는 동일합니다. – majran