这可以在Update Request Processors 的帮助下实现。 Solr 收到的每个更新请求都通过称为 Update Request Processors 的插件链运行。
这可能很有用,例如,将字段添加到被索引的文档;更改特定字段的值;或者如果传入的文档不满足某些条件,则删除更新。
您可以添加一个处理器以达到同样的效果。
处理器是:
<processor class="solr.RegexReplaceProcessorFactory">
<str name="fieldName">price</str>
<str name="pattern">[^0-9.]+</str>
<str name="replacement"></str>
<bool name="literalReplacement">true</bool>
</processor>
处理器可以添加到updateRequestProcessorChain,如下
<updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:true}"
processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse-long,parse-double,parse-date,add-schema-fields">
<processor class="solr.RegexReplaceProcessorFactory">
<str name="fieldName">price</str>
<str name="pattern">[^0-9.]+</str>
<str name="replacement"></str>
<bool name="literalReplacement">true</bool>
</processor>
<processor class="solr.LogUpdateProcessorFactory"/>
<processor class="solr.DistributedUpdateProcessorFactory"/>
<processor class="solr.RunUpdateProcessorFactory"/>
</updateRequestProcessorChain>
将此条目添加到您的托管架构文件中。
<field name="copyFloatPrice" type="float" indexed="true" stored="true" multiValued="false" docValues="true"/>
<copyField source="price" dest="copyFloatPrice"/>
当我查询 solr 时,我得到以下数据。我可以在copyFloatPrice上实现排序。
这是所做的更改。
solrConfig.xml 的变化。
<updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:true}"
processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse-long,parse-double,parse-date,add-schema-fields">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="source">price</str>
<str name="dest">copyFloatPrice</str>
</processor>
<processor class="solr.RegexReplaceProcessorFactory">
<str name="fieldName">copyFloatPrice</str>
<str name="pattern">[^0-9.]+</str>
<str name="replacement"></str>
<bool name="literalReplacement">true</bool>
</processor>
<processor class="solr.RegexReplaceProcessorFactory">
<str name="fieldName">copyFloatPrice</str>
<str name="pattern">^$</str>
<str name="replacement">0</str>
<bool name="literalReplacement">true</bool>
</processor>
<processor class="solr.LogUpdateProcessorFactory"/>
<processor class="solr.DistributedUpdateProcessorFactory"/>
<processor class="solr.RunUpdateProcessorFactory"/>
</updateRequestProcessorChain>
managed-schema 文件中所做的更改是:
<field name="price" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="copyFloatPrice" type="float" indexed="true" stored="true" multiValued="false" docValues="true"/>
solr 查询响应显示为price、copyFloatPrice 编制索引的数据并实现排序。