之前,使用phash做了一个基于ElasticSearch的图片相似性的项目,需要自己写一个评分插件,在kibana中用es的语句查询,没有问题,现在要集成到java项目中
kibana中查询语句
GET test_index/_search
{
"from": 0,
"size": 10,
"min_score":80,
"query": {
"function_score": {
"query": {
"match_all": {}
},
"functions": [
{
"script_score": {
"script": {
"source": "pure_df",
"lang": "expert_scripts",
"params": {
"field": "title",
"term": "1101100001110011111110001101111000000101010000111"
}
}
}
}
]}
},
"sort": [
{
"_score": {
"order": "desc"
}
}
]
}
java集成上述评分插件
有个地方要注意 javaAPI的script的对象中还是使用inline作为参数,但是在ElasticSearch查询语句中,inline已经被source所替代,这个地方害得我找了好久!!!
public Script(ScriptType type, String lang, String idOrCode, Map<String, Object> params) {
this(type, lang, idOrCode, type == ScriptType.INLINE ? Collections.emptyMap() : null, params);
}
1.ScriptType type, ---- 脚本类型(inline/stored)
2.String lang, -----脚本名
3.String idOrCode, -----脚本内容
4.Map<String, Object> params ----params参数