SOLR:当价格添加不正确时,如何按价格排序?
在Solr中,价格值如下所示SOLR:当价格添加不正确时,如何按价格排序?,solr,Solr,在Solr中,价格值如下所示 "Price":"0.07 AUD" "Price":"10.00" "Price":"AUD" 所以在排序时,我想忽略“Price”:“AUD” 这就是我尝试过的:但它不起作用 创建新字段 将价格字段复制到CustomPrice 创建新的自定义字段类型PriceFieldType 也试过 解决方案可以是将原始字段修改或操纵为一个或多个新字段。每个字段交替包含字母和数字部分 我的意思是将数字部分分隔为一个字段,如fieldNumeric,将字母部分分隔
"Price":"0.07 AUD"
"Price":"10.00"
"Price":"AUD"
所以在排序时,我想忽略“Price”:“AUD”
这就是我尝试过的:但它不起作用
创建新字段
将价格字段复制到CustomPrice
创建新的自定义字段类型PriceFieldType
也试过
解决方案可以是将原始字段修改或操纵为一个或多个新字段。每个字段交替包含字母和数字部分
我的意思是将数字部分分隔为一个字段,如fieldNumeric
,将字母部分分隔为另一个字段,如fieldAlpha
通过这种方式,您可以按照需要的顺序对输出进行排序,并将字段列表传递给标准的sort query子句。例如:
sort= fieldNumeric asc, fieldAlpha asc
但分割价值并不是强制性的。可以将一个字段保留为原始值,另一个字段保留为数值。您可以通过过滤数据来实现数值提取
我创建了下面的字段类型
<fieldType name="text_replace" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="[^0-9.]+" replacement="" replace="all"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
</field>
以下是查询页面:
这是带有价格排序的查询页面
如果AUD是常用术语…请将其从索引中删除,或者将其存储为solr中的不同字段,并将数值存储在价格字段中…或者检查是否可以将字母数字字段类型用于字段OK。。我正在尝试“solr.PatternTokenizerFactory”来实现这一点。。如何分隔字段?数字和文本?我只需要数字字段我用新的自定义字段尝试了这一点,但不起作用===用@PrashantPatil尝试:我建议提出一个单独的问题来分离数据…当前的问题是通过删除文本字段对数据进行排序…现在可以实现。。
<fieldType name="PriceFieldType" class="solr.TextField">
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern="(AUD?):?\s(\[0-9-\]+)" />
</analyzer>
</fieldType>
<fieldType name="PriceFieldType" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="([^0-9.])" replacement=""
replace="all"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="([^0-9.])" replacement=""
replace="all"/>
</analyzer>
</fieldType>
sort= fieldNumeric asc, fieldAlpha asc
<fieldType name="text_replace" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="[^0-9.]+" replacement="" replace="all"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
</field>