2013-03-26 40 views
1

如何將地圖存儲在Solr中的POJO中?目前,我有這樣如何將地圖存儲在Solr的POJO中?

@Field("*_locId") 
protected Map<String, Integer> geoLocationToLocationId; 

在Schema.xml文件的構建:

<dynamicField name="*_locId" type="int" indexed="false" stored="true" multiValued="false" /> 

通過添加:

public void addGeoLocationToLocationAutoInMapping(GeoCoordinates geoCoordinates, 
     Integer id) { 
    if(this.geoLocationToLocationId == null) { 
     this.geoLocationToLocationId = new HashMap<String, Integer>(); 
    } 
    this.geoLocationToLocationId.put(geoCoordinates.toString() + 
      "_locId", id); 
} 

得到的是類似的。

這樣的工作,但它有點骯髒,我在Solr這樣存儲一個Java Map,因爲我可以得到大量的字段。有沒有另一種方法將Java地圖寫入Solr?

我不想索引它們,我只是想保存數據。

+2

你爲什麼要這麼做?根據您的使用情況,也許最好將地圖存儲在另一個數據存儲區(mongo,couchbase,redis等)中,並在您檢索Solr的結果後快速查找。只有保持數據在你真正用於查詢的SORL中,並通過這個2站過程檢索剩下的數據是一種常見的(我敢說我是最佳實踐)模式。 – 2013-03-26 13:24:16

回答

2

儘管我一般都想遵循@Geert-Jan的建議,但有些時候您只想讓Solr返回所需的所有數據。在Solr中存儲一個類似於你的簡單映射(字符串到整數)的更好的方法是將鍵和值存儲爲兩個單獨的多值字段,並確保索引對它們達成一致。所以,你將有一個輯陣值字段,如:

geo_location:new york, los angeles, chicago

和其他類似

LOCATION_ID:1, 2, 3

,並確保沒有任何價值的是在location_id場空,否則你的字段中的索引不匹配。

+0

嗯。我不確定這是否可能,因此提出了我的解決方案。謝謝。 – 2013-03-27 06:56:52

+0

是否可以,因爲大量的字段(除了傳輸所需的更大流量),我的方法也會產生更長的查詢時間? – 2013-03-27 14:37:04

+0

查詢時間將不會增加,因爲您的字段未編入索引,但網絡時間可能更長。您需要對兩個案例進行基準測試並查看。 – arun 2013-03-27 17:42:54

相關問題