如何使用Solr索引和查询嵌入的属性?

时间:2012-06-18 03:29:40

标签: solr lucene full-text-search solrj

我是索尔的新手。我有这样一个要求:索引和查询我的主对象,它具有复杂属性(一个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"/>

将我的对象持久化为db时,我使用以下代码在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();
    }

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

提前致谢。

0 个答案:

没有答案