gpt4 book ai didi

php - 使用ElasticSearch无痛脚本在params数组中检查值是否存在

转载 作者:行者123 更新时间:2023-12-02 23:17:05 28 4
gpt4 key购买 nike

我是ElasticSearch的新手。我正在一个项目中,我必须搜索与输入http://foo.bar/search?listing=123,456匹配的列表。我建立了一个数组,其键和值相同,并表示列表ID。我尝试运行以下示例,但在包含附近失败。该脚本是为轻松编写语言而构建的。但是,我总是会遇到运行时错误。

我无法使它正常工作,我可能做错了什么?

 '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)",
],
],
]],
],

最佳答案

您可以使用以下查询。您可以检查script部分,了解所需的实现方式。

POST <your_index_name>/_search
{
"query": {
"function_score": {
"score_mode": "sum",
"query": {
"match_all": {}
},
"functions": [
{
"script_score": {
"script": {
"source": """
boolean allValues = false;
for(int i=0; i<params.value.size(); i++){
if(doc['id'].value.contains(params.value.get(i))){
allValues = true;
}else{
allValues = false;
break;
}
}
if(allValues){
return Math.pow(3,3)
} else {
return 0;
}
""",
"params":{
"value": ["123","456"]
}
}
}
}
]
}
}
}

该查询的作用是检查是否存在于params中的所有值,即 123 & 456是否存在于 id字段中,如果存在,它将继续进行操作并相应地计算得分。

当我在最后测试查询时,不是 id字段是 keyword

您可以在php脚本中相应地使用查询。让我知道这是否有帮助!

关于php - 使用ElasticSearch无痛脚本在params数组中检查值是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53476036/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com