我正在使用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中是否有任何方法可以实现这一目标?
答案 0 :(得分:0)
我认为您不想定义自定义FieldType。您指定的架构,我猜测将代表您的应用程序中的记录/文档。您的POJO类的所有属性都将在schema.xml
中定义为Field。 FieldType定义了您希望如何预处理索引/查询的属性。以下是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
中的架构仍然是扁平的。您可以在任何文档下添加子文档。
希望这会有所帮助。