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"}

 
  1. post http: //172.19.12.249: 9200/indextest0193/_search{
  2. "query": {
  3. "function_score": {
  4. "query": {
  5. "match": {
  6. "content": "测"
  7. }
  8. },
  9. "script_score": {
  10. "script": {
  11. "lang": "painless",
  12. "source": "if(doc['content.keyword'].value.startsWith(params.keyword))return 1; return 0;",
  13. "params": {
  14. "keyword": "测"
  15. }
  16. }
  17. },
  18. "boost_mode": "sum"
  19. }
  20. }
  21. }

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

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

 
  1. def create_time=0;
  2. if(params.gender-doc['timestamp'].value>2592000){
  3. create_time = 0;
  4. }else{
  5. create_time=(2592000+doc['timestamp'].value-params.gender)*30/2592000
  6. }
  7. def level=0;
  8. if(doc['recommend_diff'].value==4){
  9. level=30
  10. }else if(doc['recommend_diff'].value==3){
  11. level=22.5
  12. }else if(doc['recommend_diff'].value==2){
  13. level=15
  14. }else if(doc['recommend_diff'].value==1){
  15. level=7.5
  16. }else if (doc['recommend_diff'].value==0) {
  17. level=0
  18. }
  19. return create_time+level;

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

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

附kibana截图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值