java - Solr Composite Unique key from existing fields in schema -
i have index named locationindex
in solr fields follows:
<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"/> // , more fields </fields> <uniquekey>solr_id</uniquekey>
but want change schema unique key must composite of 2 present fields solr_id
, solr_ver
... follows:
<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"/> // , more fields </fields> <uniquekey>solr_ver-solr_id</uniquekey>
after searching found it's possible adding following schema: (ref: solr composite unique key 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>
so changed schema , looks like:
<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"/> // , more fields </fields> <uniquekey>id</uniquekey>
but while adding document it's giving me error:
org.apache.solr.client.solrj.solrserverexception: server @ http://localhost:8983/solr/locationindex returned non ok status:400, message:document [null] missing required field: id
i'm not getting changes in schema required work desired?
in document add, contain fields solr_ver
, solr_id
. how , it'll (solr) create id
field combining both these field solr_ver-solr_id
?
edit:
at this link it's given how refer chain. bu i'm unable understand how used in schema? , should make changes?
so looks have updaterequestprocessorchain defined appropriately , should work. however, need add solrconfig.xml file , not schema.xml. additional link provided shows how modify solrconfig.xml file , add defined updaterequestprocessorchain current /update
request handler solr instance.
so find following:
- move
<updaterequestprocessorchain>
solrconfig.xml file. update
<requesthandler name="/update" class="solr.updaterequesthandler">
entry in solrconfig.xml file , modify looks following:<requesthandler name="/update" class="solr.updaterequesthandler"> <lst name="defaults"> <str name="update.chain">composite-id</str> </lst> </requesthandler>
this should execute defined update chain , populate id field when new documents added index.
Comments
Post a Comment