2016-05-13 20 views
0

我已經設置了許多類型的索引,代表用戶數據,如ShoppingList,Playlist等。每種類型都有一個用於用戶唯一標識符的「identity_id」字段。我用下面的查詢(在一個網站的搜索功能)所有類型和字段搜索用戶:在_all上使用全文搜索時,如何爲特定字段名稱的Elasticsearch匹配評分更高?

GET _search 
{ 
    "query": { 
    "filtered": { 
     "query": { 
     "match_phrase_prefix": { 
      "_all": "awesome" 
     } 
     }, 
     "filter": { 
     "match": { 
      "identity_id": 1 
     } 
     } 
    } 
    } 
} 

我的問題是:

  1. 有沒有辦法給出一個更高的得分以匹配字段名稱中具有「名稱」的字段?例如,ShoppingList類型將有一個shopping_list_name字段,並且我希望該字段的匹配高於其他字段。
  2. 上述爲特定用戶(查詢然後篩選)進行全文搜索的方式是最有效的方式嗎?如何爲每個用戶創建索引?
+0

任何有興趣,我結束使用此代替:http://stackoverflow.com/questions/37082797/elastic-search-edge-ngram-match-query-on-all-being-ignored – Kevin

回答

1

怎麼樣這個查詢提升某些領域:

{ 
    "query": { 
    "function_score": { 
     "query": { 
     "multi_match": { 
      "query": "awesome", 
      "fields": [ 
      "*_name", 
      "field*" 
      ] 
     } 
     }, 
     "functions": [ 
     { 
      "weight": 2, 
      "filter": { 
      "multi_match": { 
       "query": "awesome", 
       "fields": [ 
       "*_name" 
       ] 
      } 
      } 
     }, 
     { 
      "weight": 1, 
      "filter": { 
      "multi_match": { 
       "query": "awesome", 
       "fields": [ 
       "field*" 
       ] 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

什麼上面的查詢確實是提高(weigth: 2)的*_name字段的查詢,而不是做任何適用於提升所謂的領域field*

上述爲特定用戶(查詢然後過濾)做全文搜索的最有效方式?如何爲每個用戶創建索引?

對此^問題,這是更復雜,你還需要考慮你有多少用戶,硬件資源的集羣有,數據結構,查詢使用等

+0

非常有趣的解決方案,謝謝!雖然我得到這個錯誤,當我嘗試: 「類型」:「number_format_exception」, 「理由」:「對於輸入字符串:\」真棒\「」 它看起來像它試圖來解讀查詢作爲數?我正在使用ElasticSearch 2.3.2 – Kevin

+0

嗯,是的,如果你的'* _name'或'field *'字段是數字字段。 –

+0

這很有道理,謝謝 – Kevin

相關問題