2015-04-27 138 views
1

我正在使用Elasticsearch來搜索用戶應該加入的組。我將用戶數據嵌入到搜索查詢中。返回時,我回去最接近的匹配組用戶應該在查找字段Elasticsearch已匹配

我正在尋找在球場上是一個嵌套領域如下:

`{"interests": [ 
       {"topics":["python", "stackoverflow", "elasticsearch"]}, 
       {"topics":["arts", "textiles"]} 
       ]}` 

但是,如果你想有一個比賽的理解 - 如何你這樣做嗎?

Elasticsearch確實有一個解釋函數,它說明評分是由tfidf組成的,但並不具體說明使用了什麼術語。

例如,如果我搜索'紡織品',那麼文檔應該匹配'紡織品'。因此,我希望「紡織品」這個術語能夠以解釋或其他方式返回。

我看到提供這種需求的唯一方法是存儲搜索和檢索到的文檔,然後處理這兩個詞以發現ES最有可能匹配的詞。

編輯 - 爲問題

的例子在我擁有"interests": ['arts', 'fine arts', 'art painting', 'arts and crafts', 'sports']

現在我搜索了一批指數一些更清晰,我找Arts和許多其他的事情。現在我搜索的這個詞多次出現在這個列表中,因此應該始終是貢獻者。

我想在響應什麼是說這些話的配合度與匹配['arts', 'fine arts', 'art painting', 'arts and crafts']其所匹配i..e「藝術」應該比別人高,但所有其他人也與此有關

回答

1

Elasticsearch允許您爲所有查詢和 過濾器指定_name字段。這意味着您可以用不同的名稱將您的查詢分爲不同的部分,這將允許您確定哪些部分匹配。

例如:

{ 
    "query" : { 
     "bool" : { 
      "should" : [ 
       {"match" : { "interests.topics" : {"query" : "python", "_name" : "py-topic"} }}, 
       {"match" : { "interests.topics" : {"query" : "arts", "_name" : "arts-topic"} }} 
      ] 
     } 
    } 
} 

然後,在你的迴應,你會得到匹配這些查詢的任何陣列(或 過濾器),你可以決定是否py-topic查詢和/或 arts-topic查詢以上匹配。

+0

謝謝李 - 你知道這是否適用於嵌套查詢?我只是嘗試了我的,並沒有運氣到目前爲止 – redrubia

+0

@redrubia它應該與嵌套查詢,如果你想編輯問題,包括你的映射我可以嘗試給一個完整的例子。 –