2017-05-12 82 views
0

ElasticSearch的新功能 - 開始喜歡它。我正在研究Rails應用程序(使用elasticsearch-rails/elasticsearch-model)。如何在同一請求中用不同的查詢詞查詢兩個不同的字段。 ElasticSearch 5.x

我有兩個字段 - 兩個字符串組成的標籤。

about_me & about_you

  • 現在我要查詢其他用戶的about_you與當前用戶about_me。
  • 與此同時,我想用當前用戶的about_you來查詢其他用戶的about_me。

這是否有意義?像兩個字段一樣,兩個查詢和每個查詢都針對特定的字段。

我只需要一個提示如何在ES中實現這一點。爲了完整起見,這裏是我在我的軌道模型創建的部分方法 - 它是不完整:

def home_search(query_you, query_me) 
    search_definition = 
     { 
      query: { 
       multi_match: { 
        query: query_me, 
        fields: ['about_you'] 
       } 
       ..... SOMETHINGs MISSING HERE ..... ? 
      }, 
      suggest: { 
       text: query, 
       about_me: { 
        term: { 
         size: 1, 
         field: :about_me 
        } 
       }, 
       about_you: { 
        term: { 
         size: 1, 
         field: :about_you 
        } 
       } 
      } 
     } 
    self.class.__elasticsearch__.search(search_definition) 
end 

任何幫助,鏈接或捐贈是受歡迎的。謝謝!

回答

1

我不知道我理解你的問題,但我可以建議兩個選項:
首次使用should類型和minimum_should_match=1bool query。在這種情況下,你可以爲你的搜索寫兩個查詢。如果您想區分結果,則可以在每個查詢中傳遞參數_name。是這樣的:

{ 
    "query": { 
     "bool": { 
     "minimum_should_match": 1, 
     "should": [ 
      { 
       "multi_match": { 
        "query": "query_me", 
        "fields": [ 
        "about_you" 
        ], 
        "_name": "about_you" 
       } 
      }, 
      { 
       "multi_match": { 
        "query": "query_you", 
        "fields": [ 
        "about_me" 
        ], 
        "_name": "about_you" 
       } 
      } 
     ] 
     } 
    } 
} 

通過提供_name你可以看到哪些查詢在搜索結果的hitted。 第二種方法可能是_msearch查詢,您可以在其中將多個查詢傳遞給端點並返回結果。 下面是一些有用的鏈接:

Bool Query
Named Queries

+1

正是我一直在尋找。是的,我昨晚正在閱讀bool查詢。很多人都願意接受 - 但答應我本週掌握它!感謝您的意見 - 非常有幫助! –

相關問題