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截圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM