我是索尔的新手。我有这样一个要求:索引和查询我的主对象,它具有复杂属性(一个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();
}
我不知道如何通过其属性进行查询。
提前致谢。