2015-02-11 68 views
0

我正在構建一個SOLR集羣,其中每個solr文檔都對應一個公司的數據。例如,以下屬性跟蹤:將歷史屬性存儲在一個SOLR文檔中

1. name 
2. size 
3. location 
4. awards 
5. profit 

我的問題是,我也想追蹤歷史數據可能改變(如大小/獎項)的屬性。我知道這樣做的簡單方法是在每個時間範圍內在SOLR中有一個文檔。所以如果我想從2012年到2013年讓所有小於50歲的公司成爲一個簡單的SOLR查詢。但是,我正在處理近2000萬家公司。使用上述策略意味着每當一個屬性發生變化時,我們都會複製該文檔 - 顯着增加solr集羣中文檔的數量。

我想要一個聰明的方式來使用SOLR中的字段,以便我可以跟蹤主要公司文檔中不提倡使用的屬性及其日期。但我似乎無法找到一個好辦法來做到這一點。我知道這部分是因爲這個問題不是SOLR的設計目的,並且以這種方式存儲數據意味着它沒有正確的標準化。但是,我只是在尋找一種避免大量複製數據的好方法。

主要用例是能夠執行類似的查詢:

select all companies that were under size 50 from 2012 to 2013 

所以每個屬性都有鏈接到一個值,有效日期,以及日期棄用場。此外,屬性值和日期必須是可搜索的。

我想要做這樣的事情:

{ 
    "size":[ 
     { 
     "date_deprecated": None, 
     "date_valid":"2015-01-01", 
     "value":"100" 
     }, 
     { 
     "date_deprecated":"2014-12-31", 
     "date_valid":"2014-01-01", 
     "value":"50" 
     }, 
     { 
     "date_deprecated":"2013-12-31", 
     "date_valid":"2013-01-01", 
     "value":"25" 
     } 
    ] 
} 

但顯然並不在SOLR飛。另外,當我使用動態solr模式時,屬性(字段)是動態的。所以我不需要知道所有屬性是什麼。

任何想法?

+0

你打算通過歷史數據來搜索嗎?如果不是,它不應該在Solr。 – 2015-02-11 04:40:07

+0

@AlexandreRafalovitch是的。我希望能夠搜索並獲取具有特定屬性的所有公司的列表,這些公司在某個日期與另一個日期之間具有特定值。使用上面的示例,我想查詢SOLR,並獲取2012年至2013年所有小於50的公司的列表。 – tknickman 2015-02-11 04:44:49

回答

0

如果您僅將Solr用於搜索,並且不要存儲字段內容,但僅對其進行索引,則數據的重複可能並不重要。索引值(即使它在20個文檔中顯示)只存儲一次,然後只列出包含它們的文檔。

因此,您可以將您的主要數據源與其他所有字段相關聯,並使用Solr進行搜索。

+0

理想情況下,我們希望將所有數據都存儲在SOLR中。 – tknickman 2015-02-11 16:57:53

+0

您不應將Solr用作主數據庫。它是爲搜索而設計和優化的。雖然它非常可靠,但正確的架構仍然會將主要數據存儲在其他地方。您還有其他選擇可以避免Solr中的數據重複,包括父/子實體,外部值字段等,但所有選項都有更復雜的折衷。最好先建立一個原型,並試驗對你的具體數據的影響。 – 2015-02-12 14:22:53