私は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"/>
オブジェクトを 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();
}
その属性でクエリを実行する方法がわかりません。
前もって感謝します。