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

Posted wujf-myblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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"}

 

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截图:

技术图片

 

以上是关于elsearch搜索引擎 + painless脚本语言入门的主要内容,如果未能解决你的问题,请参考以下文章

[ElasticSearch]painless脚本使用方式及性能比较

elsearch

Elasticsearch使用 Elasticsearch Painless 脚本以递归方式遍历 JSON 字段

Elasticsearch:如何在 Elasticsearch 中轻松编写 Painless 脚本

Elasticsearch Painless语言(实现搜索打分基础)

探究 | Elasticsearch Painless 脚本 ctxdoc_source 的区别是什么?