如何在Solr中的POJO中存储地图?

时间:2013-03-26 08:36:03

标签: map solr lucene schema

如何在Solr中的POJO中存储地图?目前我有这样的结构

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

在schema.xml文件中:

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

添加via:

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吗?

我不想索引它们,我只想保存数据。

1 个答案:

答案 0 :(得分:2)

虽然我想关注@ Geert-Jan的一般建议,但有时您只想让Solr返回您需要的所有数据。在Solr中存储类似于你的简单映射(String to Integer)的更好的方法是将键和值存储为两个单独的多值字段,并确保索引对它们达成一致。所以你会有一个多值字段,如:

geo_location:new york, los angeles, chicago

和另一个像

location_id:1, 2, 3

并确保location_id字段中的所有值都不为空,否则字段中的索引将不匹配。