How can I boost the field length norm in elasticsearch function score?
It looks like you could achieve that using a field of type token_count
together with a field_value_factor
function score.
So, something like this in the field mapping:
"name": { "type": "string", "fields": { "length": { "type": "token_count", "analyzer": "standard" } }}
This will use the number of tokens in the field. If you want to use the number of characters, you can change the analyzer from standard
to a custom one that tokenizes each character.
Then in the query:
"function_score": { ..., "field_value_factor": { "field": "name.length", "modifier": "reciprocal" }}
I have something that kind of works. With the following, I deduct the length of a field of my interest from the score.
{ "query": { "function_score": { "boost_mode": "replace", "query": {...}, "script_score": { "script": "_score - doc['<field_name>'].value.length()" } } }}
Hovever, I cannot control the relative weight of this number I am subtracting, compared to the old score. That's why I am not accepting my answer: I'll wait for better ones for a while. Ideally, I'd love to have a way to access the field length norm function within the script_score
, or to get an equivalent result.