2015-08-22 3 views
0

Я работаю над веб-приложением, используя Spring + Jersey + Mongo + Solr.Как определить пользовательский класс java как тип поля в Solr

Я хочу настраиваемый тип поля в 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 + "]"; 
    } 

} 

Say моя схема будет что-то вроде (просто манекен, например, как я не знаю, что делать):

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

Есть ли способ (ы) для достижения этой цели в Solr?

ответ

0

Я не думаю, что вы хотите определить пользовательский тип FieldType. Схема, как вы указали, я предполагаю, будет представлять запись/документ в вашем приложении. Все атрибуты вашего класса POJO будут определены как Field в schema.xml. 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 и обрабатывает поток текста перед индексированием или запросов. Вы можете написать собственные Tokenizers и Filters для своих конкретных требований.

Чтобы добавить вложенные документы в solr, вы можете найти дополнительную информацию here. Хотя ваша схема в solr schema.xml будет по-прежнему плоской. Вы можете добавить дочерние документы по любому документу.

Надеюсь, это поможет.

+0

Что вы предложите для случая, когда мне нужно использовать класс Address (из приведенного выше вопроса) в каком-то другом классе. – Isank

+0

Если вы хотите добавить 'Address' в качестве вложенного элемента в некоторый документ верхнего уровня? Затем вы должны использовать функцию «solrj» new SolrInputDocument(). AddChildDocument(). Но все же вы определяете все эти атрибуты как плоскую схему в solr 'schema.xml'. – YoungHobbit

+0

спасибо за ваши входы. – Isank

Смежные вопросы