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脚本语言入门的更多相关文章
- (五)Lua脚本语言入门
---恢复内容开始--- 写完这篇Lua脚本语言入门,自己就要尝试去用Lua脚本语言写esp8266了,,自己现在挺心急的,因为朋友使用esp8266本来说自己帮忙写好程序的,但是用的单片机不一样自己 ...
- (一)Lua脚本语言入门
今天开始自己的Lua语言学习,Lua脚本语言,是介于应用程序和开发其应用程序的底层编程语言之间,,它很方便调用其它语言,它只是在载入时对其进行编译,而不像我们写的单片机程序是预编译的,先编译好然后写入 ...
- (三)Lua脚本语言入门
又要找工作了,变的忧虑了,唯有学习才让内心变得踏实,今天玩了一下午的王者荣耀,正事都忘了...... 如果认为所谓的毅力是每分每秒的"艰苦忍耐"式的奋斗,那这是一种很不足的心理状态 ...
- (三)Lua脚本语言入门(数组)
又要找工作了,变的忧虑了,唯有学习才让内心变得踏实,今天玩了一下午的王者荣耀,正事都忘了...... 如果认为所谓的毅力是每分每秒的“艰苦忍耐”式的奋斗,那这是一种很不足的心理状态.毅力是一种习惯,毅 ...
- Lua脚本语言入门学习其应用教程
Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用.不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,Ini等文件格式,并且更 ...
- Lua游戏脚本语言入门(一)
作者: 沐枫 (第二人生成员) 原文地址:http://job.17173.com/content/2009-01-22/20090122143452606,1.shtml 在这篇文章中,我想向大家介 ...
- (二)Lua脚本语言入门
上一篇文章忘了插入代码了,方便粘贴复制...... 函数 对于c语言就是 void aa()//c语言是用void { print("这是一个函数") } Lua就变成了 func ...
- (二)Lua脚本语言入门(关于函数)
上一篇文章忘了插入代码了,方便粘贴复制...... 函数 对于c语言就是 void aa()//c语言是用void { print("这是一个函数") } Lua就变成了 func ...
- Linux 脚本语言入门
0.脚本编写初步介绍 (1)脚本第一行以 #!/bin/sh 开始,也可以用 #!/bin/bash 开始,但是第一行必须以这种方式开始. (2)脚本名需要以.sh结尾 (3)#开头的句子表示注释 ( ...
随机推荐
- Nginx code 状态码说明
最近了解下Nginx的Code状态码,在此简单总结下. 先来再回顾一下一个http请求处理流程: 一个普通的http请求处理流程,如上图所示: A -> client端发起请求给nginx B ...
- Spring AnnotationConfigApplicationContext
Spring AnnotationConfigApplicationContext 概述 通常Spring XML文件用来作为ClassPathXmlApplicationContext 的初始化.@ ...
- VMware workstation 虚拟网络 三种上网区别
以VMware workstation为例,其虚拟网络设备有3种: 第一种:vmnet0(桥接模式),无实体虚拟网卡,其实就是一个协议而已,会在对应网卡上加入VMware bridge protoco ...
- yield 伪并发例子
import timedef custumer(name): print('%s 准备吃饺子了'%name) while True: curry = yield print('饺子%s来了 ,被%s吃 ...
- centos最小化安装时网络配置
查看网卡: ip addr 修改网络配置文件 vi /etc/sysconfig/network-scripts/ifcfg-enp33 BOOTPROTO=dhcp ONBOOT=yes 重启网络服 ...
- 网络收发与Nginx事件间的对应关系
主机A可以想象是家里面的一台笔记本,也就是客户端,主机B可以想象成服务器上跑着nginx 主机A发送一个http的get请求到主机B经历了哪些请求. 在数据流: 应用层发送了一个get请求,传输层中, ...
- ORACLE-SQLLOAD导入外部数据详解
今天公司需要把外部文本的一些数据导入到数据库.这里把相关步骤和注意的地方记录,供需要的人参考学习!这里的环境是在windows下的数据库,linux或者其他数据库同理! 1.准备工作:创建需要导入数据 ...
- 详解SkipList跳跃链表【含代码】
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天继续介绍分布式系统当中常用的数据结构,今天要介绍的数据结构非常了不起,和之前介绍的布隆过滤器一样,是一个功能强大原理简单的数据结构.并且 ...
- php curl 检测网页是否被百度收录
<?php /* * 检测百度是否收录网页 curl模式 * @ param string $url传入的url* return int (1 收录 0 不收录) */ function che ...
- 如何开始阅读ASP.NET Core源代码
背景 当我们对ASP.Net Core内部的某些方法.类的实现感兴趣时,有很多方法可以去了解,看书,看各种文章,但是最直接也是最深入的办法就是去阅读源代码.ASP.NET Core的源代码托管在Git ...