我是 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();
}
我不知道如何通过它的属性进行查询。
提前致谢。