elsearch搜索引擎 + painless脚本语言入门

最近项目用到了elsearch,ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎。

自从版本6.0之后,其默认脚本语言变为 painless 。

painless作为一门脚本语言,起语言风格跟js很类似。

es 安装 :

  解压 编译安装

es 命令:

  

su elsearch    (普通用户才能启动)
./elasticsearch -d  (重启)

我们首先做个测试,插入2条数据:

put http://172.19.12.249:9200/indextest0193/player/_bulk?refresh
{"index":{"_id":1}}
{"content" : "测试语句1"}
{"index":{"_id":2}}
{"content" : "我的测试语句2"}

扫描二维码关注公众号,回复: 9445801 查看本文章
post http: //172.19.12.249: 9200/indextest0193/_search{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "content": ""
        }
      },
      "script_score": {
        "script": {
          "lang": "painless",
          "source": "if(doc['content.keyword'].value.startsWith(params.keyword))return 1; return 0;",
          "params": {
            "keyword": ""
          }
        }
      },
      "boost_mode": "sum"
    }
  }
}

上面例子是  传入参数keyword,搜索如果匹配到keyword 则返回1,否则为0。

如果是多个字段进行打分:

def create_time=0;
if(params.gender-doc['timestamp'].value>2592000){
	create_time = 0;
}else{
	create_time=(2592000+doc['timestamp'].value-params.gender)*30/2592000
}
def level=0;
if(doc['recommend_diff'].value==4){
	level=30
}else if(doc['recommend_diff'].value==3){
	level=22.5
}else if(doc['recommend_diff'].value==2){
	level=15
}else if(doc['recommend_diff'].value==1){
	level=7.5
}else if (doc['recommend_diff'].value==0) {
	level=0
}

return create_time+level;

  其中gender是我传的参数,其他则是字段索引。最后 return 2个分数,用 + 进行连接。注意的是 source里面如果用双引号,那么里面

函数之间不能有空格!!! 调试可以在kibana里面调试。

 附kibana截图:

猜你喜欢

转载自www.cnblogs.com/wujf-myblog/p/12373556.html