如何在Solr

时间:2015-08-22 16:00:39

标签: java solr

我正在使用Spring + Jersey + Mongo + Solr开发Web应用程序。

我想在solr中使用自定义字段类型。

例如,下面是我想要作为solr的自定义字段类型的类。

public class Address {
    private String id;

    private String country;

    private String city;

    private String state;

    private String postalCode;

    private String roadNumber;

    private String roadName;

    private String houseNumber;

    private String locality;

    private String userId;

    private Double latitude;

    private Double longitude;

    public String getId() {
    return id;
    }

    public void setId(String id) {
    this.id = id;
    }

    public String getCountry() {
    return country;
    }

    public void setCountry(String country) {
    this.country = country;
    }

    public String getCity() {
    return city;
    }

    public void setCity(String city) {
    this.city = city;
    }

    public String getState() {
    return state;
    }

    public void setState(String state) {
    this.state = state;
    }

    public String getPostalCode() {
    return postalCode;
    }

    public void setPostalCode(String postalCode) {
    this.postalCode = postalCode;
    }

    public String getRoadNumber() {
    return roadNumber;
    }

    public void setRoadNumber(String roadNumber) {
    this.roadNumber = roadNumber;
    }

    public String getRoadName() {
    return roadName;
    }

    public void setRoadName(String roadName) {
    this.roadName = roadName;
    }

    public String getHouseNumber() {
    return houseNumber;
    }

    public void setHouseNumber(String houseNumber) {
    this.houseNumber = houseNumber;
    }

    public String getUserId() {
    return userId;
    }

    public void setUserId(String userId) {
    this.userId = userId;
    }

    public Double getLatitude() {
    return latitude;
    }

    public void setLatitude(Double latitude) {
    this.latitude = latitude;
    }

    public Double getLongitude() {
    return longitude;
    }

    public void setLongitude(Double longitude) {
    this.longitude = longitude;
    }

    public String getLocality() {
    return locality;
    }

    public void setLocality(String locality) {
    this.locality = locality;
    }

    @Override
    public String toString() {
    return "Address [id=" + id + ", country=" + country + ", city=" + city + ", state=" + state + ", postalCode=" + postalCode + ", roadNumber="
        + roadNumber + ", roadName=" + roadName + ", houseNumber=" + houseNumber + ", locality=" + locality + ", userId=" + userId + ", latitude="
        + latitude + ", longitude=" + longitude + "]";
    }

}

说我的架构会是这样的(只是一个假人,例如我不知道该怎么做):

<field name="address" type="Address" indexed="true" stored="true" multiValued="true"/>

在Solr中是否有任何方法可以实现这一目标?

1 个答案:

答案 0 :(得分:0)

我认为您不想定义自定义FieldType。您指定的架构,我猜测将代表您的应用程序中的记录/文档。您的POJO类的所有属性都将在schema.xml中定义为FieldFieldType定义了您希望如何预处理索引/查询的属性。以下是POJO的架构示例(未完成)。

<field name="id" type="keyword" indexed="true" stored="true" />
<field name="city" type="string" indexed="true" stored="true" />
<field name="country" type="string" indexed="true" stored="true" />
<field name="state" type="string" indexed="true" stored="true" />
<field name="postalCode" type="string" indexed="true" stored="true" />
<field name="roadNumber" type="test_general" indexed="true" stored="true" />

type标记中的Field属性定义FieldType并在编制索引或查询之前处理文本流。您可以根据具体要求编写自定义标记符和过滤器。

要在solr中添加嵌套文档,您可以找到更多信息here。即使您在solr schema.xml中的架构仍然是扁平的。您可以在任何文档下添加子文档。

希望这会有所帮助。