I am new to ElasticSearch. I am working on a project where I have to search listings which matches the input http://foo.bar/search?listing=123,456
. I have built an array which key and value are the same and representing the listing ids. I have tried to run the following example but it failed near contains. The script is built for painless language. However, I always get the runtime error.
I cannot get this to work, what could I be doing wrong?
'function_score' => [
'query' => $query,
'score_mode' => 'sum',
'functions' => [[
'script_score' => [
'script' => [
'params' => ['listing' => [123 => 123, 456 => 456]],
'source' => "(params.listing.contains(doc['id'].value) ? Math.pow(3, 3) : 0)",
],
],
]],
],
You can make use of the below query. You can check the
script
part as how what you need has been implemented.What the query does is, it checks to see if all the values present in params i.e
123 & 456
is present in theid
field, if it does, it would go ahead and calculate score accordingly.Not that
id
field is akeyword
when I tested the query at my end.You can use the query accordingly in your php script. Let me know if this helps!