2015-12-03 30 views
1

我的使用情況有一點複雜,所以我使用的產品和採購簡化IT:彈性搜索 - 根據外部因素改變相關

的應用已經有一個大的數據庫表的變化,其中 - 產品和購買(多對多:user_id:product_id)。 Elastic只有產品的索引,因爲這是唯一需要進行高級/高級搜索的實體。

我試圖實現的是如下: 當前用戶購買產品的次數越多,我希望它的相關性越高。

棘手的部分是事實,Elastic只有產品的索引,而不是購買。 我可以在DB中執行一個查詢,並獲取用戶購買產品的次數,並將結果傳遞給Elastic,問題是如何去做。

謝謝。

+0

如何在產品文檔中添加一個名爲'nb_purchases'的字段,您可以在每次購買時遞增?然後,您可以使用該字段進行關聯,排序等。 – Val

+0

問題是該字段是每個用戶。在數據庫中有成千上萬的用戶,所以添加這個字段會大大增加產品文檔的大小。此外,它會影響應用程序的性能,因爲每次購買都需要更新產品文檔。 – David

+0

哦,有道理,我沒有意識到它是爲了每個用戶。 – Val

回答

2

如果你能產生一個合理的有界的購買歷史記錄爲每個搜索,你可以一個bool query內使用可選shouldterm queries

例如列表實現這個

"bool": { 
    "must": [ <existing query logic> ], 
    "should": [ 
    { 
     "term": { "product_id": 654321 }, 
     "boost": 3 <e.g. Purchased 3 times> 
    }, 
    { 
     ... 
    } 
    ] 
} 

作爲擡頭,評估大量的這些可選的布爾條款會降低你的查詢性能,所以你也可以考慮使用rescore request您提高邏輯只適用於,比如說,前100名未放大的搜索點擊,如果這將滿足您的要求。