最近項目用到了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截圖: