标签:put ret ref pre highlight image diff test elastic
最近项目用到了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截图:
标签:put ret ref pre highlight image diff test elastic
原文地址:https://www.cnblogs.com/wujf-myblog/p/12373556.html