我是ElasticSearch的新手。我正在一个项目中,我必须搜索与输入function fromUser(model) {
var preset = {
'only-letters': /[^A-Za-z]/g
};
var regex = preset[attr.customInputValidator] || attr.customInputValidator;
var transformedInput = model.replace(regex, '');
return transformedInput;
}
相匹配的列表。我建立了一个数组,其键和值相同,并表示列表ID。我尝试运行以下示例,但在包含附近失败。该脚本是为轻松编写语言而构建的。但是,我总是会遇到运行时错误。
我无法使它正常工作,我可能做错了什么?
http://foo.bar/search?listing=123,456
答案 0 :(得分: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"]
}
}
}
}
]
}
}
}
查询的作用是,检查是否存在于参数中的所有值,即123 & 456
是否存在于id
字段中,如果存在,它将继续计算相应的分数。
在我最后测试查询时,id
字段不是keyword
。
您可以在php脚本中相应地使用查询。让我知道是否有帮助!