我安装solr 6.2.1并在架构中定义一个uniqueField:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Solr managed schema - automatically generated - DO NOT EDIT -->
<schema name="ps_product" version="1.5">
<fieldType name="int" class="solr.TrieIntField" positionIncrementGap="0" precisionStep="0"/>
<fieldType name="long" class="solr.TrieLongField" positionIncrementGap="0" precisionStep="0"/>
<fieldType name="string" class="solr.TextField" omitNorms="true" sortMissingLast="true"/>
<fieldType name="uuid" class="solr.UUIDField" indexed="true"/>
<field name="_version_" type="long" multiValued="false" indexed="true" stored="true"/>
<field name="id_product" type="uuid" default="NEW" indexed="true" stored="true"/>
<uniqueKey>id_product</uniqueKey>
<field name="name" type="string" indexed="true" stored="true"/>
<field name="title" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
</schema>
和我的数据配置如下:
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/pressdb-local" user="sa" password="" />
<document>
<entity name="item" query="select * from ps_product as p inner join ps_product_lang as pl on pl.id_product=p.id_product where pl.id_lang=2"
deltaQuery="select id from ps_product where date_upd > '${dataimporter.last_index_time}'">
<field name="name" column="name"/>
<field name="id_product" column="id_product"/>
<entity name="comment"
query="select title from ps_product_comment where id_product='${item.id_product}'"
deltaQuery="select id_product_comment from ps_product_comment where date_add > '${dataimporter.last_index_time}'"
parentDeltaQuery="select id_product from ps_product where id_product=${comment.id_product}">
<field name="title" column="title" />
</entity>
</entity>
</document>
</dataConfig>
但是当我想在solr中定义一个核心时,给我一个错误:
Error CREATEing SolrCore 'product': Unable to create core [product] Caused by: QueryElevationComponent requires the schema to have a uniqueKeyField.
请帮我解决这个问题。
答案 0 :(得分:0)
由于Solr 4和支持SolrCloud,uniqueKey字段无法再使用git push
填充,您应该从schema.xml中的feld定义中删除它:
default=...
更新:正如MatsLindh所指出的那样,您似乎在schemaless mode中使用了Solr。此模式下的架构更新必须通过Schema API完成,您不应编辑托管架构(<field name="id_product" type="uuid" indexed="true" stored="true"/>
)。要定义 id_product 和 uniqueKey 字段,请使用API或revert to the classic schema模式。
要为正在添加但尚未在指定字段中具有值的任何文档生成uniqueKey,您可以使用UUIDUpdateProcessorFactory(参见Update Request Processor)。您需要在solrconfig.xml中定义更新处理器链:
<!-- Solr managed schema - automatically generated - DO NOT EDIT -->
然后通过请求处理程序定义中的请求参数 <updateRequestProcessorChain name="uuid">
<processor class="solr.UUIDUpdateProcessorFactory">
<str name="fieldName">id_product</str>
</processor>
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
指定处理器链的使用。