2013-03-26 17 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

相关问题