2016-01-08 97 views
6

我正在尋找一種方法來在Algolia中搜索一個記錄,其中至少有一個數組元素符合幾個條件。 作爲一個例子,假設這樣的記錄:Algolia AND通過數組搜索

{ 
    "name": "Shoes", 
    "price": 100, 
    "prices": [ 
    { 
     "start": 20160101, 
     "end": 20160131, 
     "price": 50, 
    }, 
    { 
     "start": 20160201, 
     "end": 20160229, 
     "price": 80, 
    } 
    ] 
} 

我正在尋找一種方式做類似下面的查詢:

prices.price<60 AND prices.start<=20160210 AND prices.end>=20160210

(A產品在價格低於60給定日期)

因爲價格條件不滿足該日期,但無論如何返回錄製查詢應該不返回任何東西。可能是因爲在所有價格中「全球」都滿足了條件。

我與Algolia一個初學者,努力學習。有沒有一種方法可以完成預期的要求,還是需要單獨索引價格並使用multiple queries

謝謝。

回答

7

當一個facetFiltertagFilter應用於一個數組時,Algolia的引擎檢查數組中是否有元素匹配,然後進入下一個條件。

它的行爲這種方式,而不是你所期望的方式很簡單的原因:讓我們假設你有一個字符串數組(如標籤):

{ tags: ['public', 'cheap', 'funny', 'useless'] } 

當用戶想要找到的記錄是「無用的「和」有趣的「,這個用戶不會同時尋找既」無用「也」有趣「的標籤,而是尋找包含兩個標籤的記錄。

對此的解決方案是進行非規範化的對象以某種方式:將一個記錄與對象的數組到多個記錄每一個對象。

所以,你會變換

{ 
    "name": "Shoes", 
    "price": 100, 
    "prices": [ 
     { "start": 20160101, "end": 20160131, "price": 50 }, 
     { "start": 20160201, "end": 20160229, "price": 80 } 
    ] 
} 

[ 
    { 
    "name": "Shoes", 
    "default_price": 100, 
    "price": { "start": 20160101, "end": 20160131, "price": 50 } 
    }, 
    { 
    "name": "Shoes", 
    "default_price": 100, 
    "price": { "start": 20160201, "end": 20160229, "price": 80 } 
    } 
] 

您既可以在同一個指數做到這一點(和使用distinct刪除重複的),或者每月或每天一個指數。這取決於你的使用情況,這使得給你正確的解決方案有點難。