最近项目用到了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脚本语言入门的更多相关文章

  1. (五)Lua脚本语言入门

    ---恢复内容开始--- 写完这篇Lua脚本语言入门,自己就要尝试去用Lua脚本语言写esp8266了,,自己现在挺心急的,因为朋友使用esp8266本来说自己帮忙写好程序的,但是用的单片机不一样自己 ...

  2. (一)Lua脚本语言入门

    今天开始自己的Lua语言学习,Lua脚本语言,是介于应用程序和开发其应用程序的底层编程语言之间,,它很方便调用其它语言,它只是在载入时对其进行编译,而不像我们写的单片机程序是预编译的,先编译好然后写入 ...

  3. (三)Lua脚本语言入门

    又要找工作了,变的忧虑了,唯有学习才让内心变得踏实,今天玩了一下午的王者荣耀,正事都忘了...... 如果认为所谓的毅力是每分每秒的"艰苦忍耐"式的奋斗,那这是一种很不足的心理状态 ...

  4. (三)Lua脚本语言入门(数组)

    又要找工作了,变的忧虑了,唯有学习才让内心变得踏实,今天玩了一下午的王者荣耀,正事都忘了...... 如果认为所谓的毅力是每分每秒的“艰苦忍耐”式的奋斗,那这是一种很不足的心理状态.毅力是一种习惯,毅 ...

  5. Lua脚本语言入门学习其应用教程

    Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用.不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,Ini等文件格式,并且更 ...

  6. Lua游戏脚本语言入门(一)

    作者: 沐枫 (第二人生成员) 原文地址:http://job.17173.com/content/2009-01-22/20090122143452606,1.shtml 在这篇文章中,我想向大家介 ...

  7. (二)Lua脚本语言入门

    上一篇文章忘了插入代码了,方便粘贴复制...... 函数 对于c语言就是 void aa()//c语言是用void { print("这是一个函数") } Lua就变成了 func ...

  8. (二)Lua脚本语言入门(关于函数)

    上一篇文章忘了插入代码了,方便粘贴复制...... 函数 对于c语言就是 void aa()//c语言是用void { print("这是一个函数") } Lua就变成了 func ...

  9. Linux 脚本语言入门

    0.脚本编写初步介绍 (1)脚本第一行以 #!/bin/sh 开始,也可以用 #!/bin/bash 开始,但是第一行必须以这种方式开始. (2)脚本名需要以.sh结尾 (3)#开头的句子表示注释 ( ...

随机推荐

  1. Nginx-Http服务器常用配置

    #运行用户 user nobody; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日志及PID文件 #error_log logs/error.log; ...

  2. AcWing 789.数的范围

    AcWing 789.数的范围 题目描述 给定一个按照升序排列的长度为n的整数数组,以及 q 个查询. 对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数). 如果数组中不存在该元素, ...

  3. Spring相关jar说明

    Spring整合使用说明 一.只是使用spring框架 dist\spring.jar lib\jakarta-commons\commons-logging.jar 如果使用到了切面编程(AOP), ...

  4. 解决AS加载gradle时出现的Could not find com.android.tools.build:gradle:3.5.0.的错误

    时间:2019/12/7 最近在做安卓大作业时总是遇到从GitHub上下载下来的demo不能在本地Android studio中运行的问题,感觉真的被安卓中的各种版本给恶心到了,下面记录其中比较典型的 ...

  5. linux系统CentOS7中find命令使用

    一.作用 查找文件或目录 二.参数(常用) -atime 查找在指定时间曾被存取过的目录或文件,单位以24小时计算.(访问时间,执行文件等) -ctime 查找指定时间曾被更改的目录或文件,单位以24 ...

  6. 计算机网络 & 网络编程 期末总结与测评题

      第一部分:网络编程部分的相关知识 Socket套接字定义: 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序 ...

  7. awk命令入门

    什么是awk? AWK是一个强大的文本处理工具.可以使用awk读取输入文件.为数据排序.处理数据.对输入执行计算以及生成报表,还有无数其他的功能. 使用awk的基本格式 awk [options] ‘ ...

  8. 全网最全小白搭建Hexo+Gitee/Coding

    全网最全小白搭建Hexo+Gitee/Coding 本站内容已全部转移到https://www.myyuns.ltd,具体请移步到www.myyuns.ltd查看

  9. [源码分析] 从源码入手看 Flink Watermark 之传播过程

    [源码分析] 从源码入手看 Flink Watermark 之传播过程 0x00 摘要 本文将通过源码分析,带领大家熟悉Flink Watermark 之传播过程,顺便也可以对Flink整体逻辑有一个 ...

  10. javascript 获取两点的像素距离

    getPosLen(sdot, edot){//获取2点距离 /* 56 40 56 40 00 40 56 40 56 */ return parseInt(Math.sqrt(Math.pow(M ...