Skip to content

Commit 4cb152c

Browse files
authored
fix search error with staleness and incompleteness (#2688)
1 parent 5dec7f3 commit 4cb152c

File tree

2 files changed

+31
-26
lines changed

2 files changed

+31
-26
lines changed

learning_resources_search/api.py

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -592,38 +592,37 @@ def add_text_query_to_search(search, text, search_params, query_type_query):
592592

593593
if yearly_decay_percent or max_incompleteness_penalty:
594594
script_query = {
595-
"script_score": {
595+
"function_score": {
596596
"query": {"bool": {"must": [text_query], "filter": query_type_query}}
597597
}
598598
}
599599

600-
completeness_term = (
601-
"(doc['completeness'].value * params.max_incompleteness_penalty + "
602-
"(1-params.max_incompleteness_penalty))"
603-
)
604-
605-
staleness_term = (
606-
"(doc['resource_age_date'].size() == 0 ? 1 : "
607-
"decayDateLinear(params.origin, params.scale, params.offset, params.decay, "
608-
"doc['resource_age_date'].value))"
609-
)
610-
611-
source = "_score"
600+
source = []
612601
params = {}
613602

614603
if max_incompleteness_penalty:
615-
source = f"{source} * {completeness_term}"
604+
completeness_term = (
605+
"(doc['completeness'].value * params.max_incompleteness_penalty + "
606+
"(1-params.max_incompleteness_penalty))"
607+
)
608+
source.append(completeness_term)
616609
params["max_incompleteness_penalty"] = max_incompleteness_penalty
617610

618611
if yearly_decay_percent:
619-
source = f"{source} * {staleness_term}"
612+
staleness_term = (
613+
"(doc['resource_age_date'].size() == 0 ? 1 : "
614+
"decayDateLinear(params.origin, params.scale, params.offset, "
615+
"params.decay, doc['resource_age_date'].value))"
616+
)
617+
source.append(staleness_term)
620618
params["decay"] = 1 - (yearly_decay_percent / 100)
621619
params["offset"] = "0"
622620
params["scale"] = "365d"
623621
params["origin"] = datetime.now(tz=UTC).strftime("%Y-%m-%dT%H:%M:%S.%fZ")
624622

625-
script_query["script_score"]["script"] = {
626-
"source": source,
623+
script_query["function_score"]["script_score"] = {}
624+
script_query["function_score"]["script_score"]["script"] = {
625+
"source": "*".join(source),
627626
"params": params,
628627
}
629628

learning_resources_search/api_test.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2000,8 +2000,8 @@ def test_execute_learn_search_with_script_score(
20002000

20012001
if yearly_decay_percent > 0 and max_incompleteness_penalty > 0:
20022002
source = (
2003-
"_score * (doc['completeness'].value * params.max_incompleteness_penalty + "
2004-
"(1-params.max_incompleteness_penalty)) * (doc['resource_age_date'].size() == 0 ? "
2003+
"(doc['completeness'].value * params.max_incompleteness_penalty + "
2004+
"(1-params.max_incompleteness_penalty))*(doc['resource_age_date'].size() == 0 ? "
20052005
"1 : decayDateLinear(params.origin, params.scale, params.offset, params.decay, "
20062006
"doc['resource_age_date'].value))"
20072007
)
@@ -2014,7 +2014,7 @@ def test_execute_learn_search_with_script_score(
20142014
}
20152015
elif yearly_decay_percent > 0:
20162016
source = (
2017-
"_score * (doc['resource_age_date'].size() == 0 ? "
2017+
"(doc['resource_age_date'].size() == 0 ? "
20182018
"1 : decayDateLinear(params.origin, params.scale, params.offset, params.decay, "
20192019
"doc['resource_age_date'].value))"
20202020
)
@@ -2027,7 +2027,7 @@ def test_execute_learn_search_with_script_score(
20272027
}
20282028
else:
20292029
source = (
2030-
"_score * (doc['completeness'].value * params.max_incompleteness_penalty +"
2030+
"(doc['completeness'].value * params.max_incompleteness_penalty +"
20312031
" (1-params.max_incompleteness_penalty))"
20322032
)
20332033
params = {"max_incompleteness_penalty": 0.25}
@@ -2047,7 +2047,17 @@ def test_execute_learn_search_with_script_score(
20472047

20482048
query = {
20492049
"query": {
2050-
"script_score": {
2050+
"function_score": {
2051+
"functions": [
2052+
{
2053+
"script_score": {
2054+
"script": {
2055+
"params": params,
2056+
"source": source,
2057+
},
2058+
},
2059+
},
2060+
],
20512061
"query": {
20522062
"bool": {
20532063
"must": [
@@ -2301,10 +2311,6 @@ def test_execute_learn_search_with_script_score(
23012311
"filter": [{"exists": {"field": "resource_type"}}],
23022312
}
23032313
},
2304-
"script": {
2305-
"source": source,
2306-
"params": params,
2307-
},
23082314
}
23092315
},
23102316
"post_filter": {

0 commit comments

Comments
 (0)