2013-11-21 103 views
1

我有像某些字段用戶資料:替換默認Elasticsearch得分

  • 用戶名
  • 性別
  • 國籍
  • 年齡
  • 語言
  • 首選語言
  • 首選年齡

每個用戶應該能夠搜索基於一些過濾器(用戶名,性別,年齡,語言),而最終的結果應該根據喜好得分進行排序的其他用戶(首選語言,偏好的年齡)

考慮下面的例子:

用戶配置文件:

  • 用戶名= 'randomdude'
  • 性別= '男性'
  • 國籍= '意大利'
  • 年齡= '21'
  • 語言= '英語,意大利語,西班牙語'
  • 優選語言= '英語,意大利語'
  • 優選年齡= '20 -30'

Randomdude希望進行研究我們ElasticSearch文件,他會設置這些過濾器:

  • 性別=「女」
  • 國籍=「西班牙」

所以最終名單應該包括西班牙唯一的女性,但它應該更喜歡英語的人或意大利在20和30之間的語言領域和年齡,但不排除其他地區。所以他仍然可以看到那些用西班牙語說話的人,並且已經有40人,但幾乎排在最後。

我正在使用Elasticsearch的php包裝。我嘗試過使用很多函數,我想我應該使用函數分數查詢,但是我無法完成它,因爲文檔對我來說非常混亂。

+0

沒錯,function_score是要走的路。分享你的嘗試和失敗的地方會很高興。實際上,function_score文檔可能是我們有過的最好的文檔,正如一些人在twitter上所說的那樣:) https://twitter.com/alexbilbie/status/382136147893571584 – javanna

回答

0

我要明白ES:d我解決了這個問題,有一個布爾查詢這樣的,但我不知道這是最好的解決方案

{ 
    "query" : { 
     "bool" : { 
      "must" :[ 
       {"term" : { "gender" : "female" } }, 
       {"term" : { "nationality" : "spanish" } }, 
      ], 
      "should" :[ 
       {"match" : { "language" : { "query" : "english italian","operator" : "or" } } }, 
      ] 
     } 
    } 
}