LocationIndex
次のようなフィールドを持つsolrで名前が付けられたインデックスがあります。
<fields>
<field name="solr_id" type="string" stored="true" required="true" indexed="true"/>
<field name="solr_ver" type="string" stored="true" required="true" indexed="true" default="0000"/>
// and some more fields
</fields>
<uniqueKey>solr_id</uniqueKey>
しかし今、私はスキーマを変更して、一意のキーが2つの既存のフィールドの複合体でなければならないようにしたいと思っていますsolr_id
...solr_ver
次のように:
<fields>
<field name="solr_id" type="string" stored="true" required="true" indexed="true"/>
<field name="solr_ver" type="string" stored="true" required="true" indexed="true" default="0000"/>
<field name="composite-id" type="string" stored="true" required="true" indexed="true"/>
// and some more fields
</fields>
<uniqueKey>solr_ver-solr_id</uniqueKey>
検索した後、スキーマに以下を追加することで可能であることがわかりました: (ref: Solr Composite Unique key from existing fields in schema )
<updateRequestProcessorChain name="composite-id">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="source">docid_s</str>
<str name="source">userid_s</str>
<str name="dest">id</str>
</processor>
<processor class="solr.ConcatFieldUpdateProcessorFactory">
<str name="fieldName">id</str>
<str name="delimiter">--</str>
</processor>
<processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
だから私はスキーマを変更し、最終的には次のようになります。
<updateRequestProcessorChain name="composite-id">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="source">solr_ver</str>
<str name="source">solr_id</str>
<str name="dest">id</str>
</processor>
<processor class="solr.ConcatFieldUpdateProcessorFactory">
<str name="fieldName">id</str>
<str name="delimiter">-</str>
</processor>
<processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
<fields>
<field name="solr_id" type="string" stored="true" required="true" indexed="true"/>
<field name="solr_ver" type="string" stored="true" required="true" indexed="true" default="0000"/>
<field name="id" type="string" stored="true" required="true" indexed="true"/>
// and some more fields
</fields>
<uniqueKey>id</uniqueKey>
しかし、ドキュメントを追加しているときにエラーが発生します:
org.apache.solr.client.solrj.SolrServerException: Server at http://localhost:8983/solr/LocationIndex returned non ok status:400, message:Document [null] missing required field: id
期待どおりに機能するために必要なスキーマの変更が得られませんか?
私が追加したドキュメントには、フィールドsolr_ver
とsolr_id
. id
これらの両方のフィールドを次のように組み合わせて、フィールドを作成する方法と場所 (solr) はsolr_ver-solr_id
?
編集:
このリンクでは、このチェーンを参照する方法が示されています。しかし、スキーマでどのように使用されるのか理解できませんか? また、どこを変更すればよいですか?