2

我是 Solr 的新手。我有这样一个要求:索引并查询我的具有复杂属性的主要对象(一个 java 对象)。

在休眠搜索中我可以使用@IndexedEmbedded,但我不知道如何使用 solr。

public class MyObject
{
    @org.apache.solr.client.solrj.beans.Field("attributes")
    private Set<Attribute> attributes = new HashSet<Attribute>();
....
}

public class Attribute {
        @org.apache.solr.client.solrj.beans.Field("attr_name")
        private String name;
        @org.apache.solr.client.solrj.beans.Field("attr_value")
        private String value;
.....
}

现在,我想索引MyObject自身的内容以及它的属性。我配置schema.xml如下:

   <field name="attributes" type="text_general" indexed="true" stored="false"/>
   <field name="attr_name" type="text_general" indexed="true" stored="false"/>
   <field name="attr_value" type="text_general" indexed="true" stored="false"/>

当我的对象进入数据库时​​,我使用以下代码在 solr 中建立索引:

solrServer.addBean(myObj);
solrServer.commit();

但在 solr 服务器日志中出现错误:

SEVERE: org.apache.solr.common.SolrException: ERROR: [doc=691b6b57-4c14-498e-8298-db9c098f7b82] unknown field 'attributes'
    at org.apache.solr.update.DocumentBuilder.toDocument(DocumentBuilder.java:340)
    at org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:60)
    at org.apache.solr.update.processor.LogUpdateProcessor.processAdd(LogUpdateProcessorFactory.java:115)
    at org.apache.solr.handler.XMLLoader.processUpdate(XMLLoader.java:157)
    at org.apache.solr.handler.XMLLoader.load(XMLLoader.java:79)
    at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:58)
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:129)

我想是因为我的配置错误,有人可以纠正我吗?

我有一个查询的问题。我想MyObject通过搜索它的属性来获得。目前我MyObject通过以下代码搜索:

    SolrQuery query = new SolrQuery();
    query.setQuery(keyword);
    QueryResponse qr;
    List<MyObject> results=null;
    try {
        qr = solrServer.query(query);
        results = qr.getBeans(MyObject.class);
    } catch (SolrServerException e) {
        e.printStackTrace();
    }

我不知道如何通过它的属性进行查询。

提前致谢。

4

0 回答 0