Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SOLR:当价格添加不正确时,如何按价格排序?_Solr - Fatal编程技术网

SOLR:当价格添加不正确时,如何按价格排序?

SOLR:当价格添加不正确时,如何按价格排序?,solr,Solr,在Solr中,价格值如下所示 "Price":"0.07 AUD" "Price":"10.00" "Price":"AUD" 所以在排序时,我想忽略“Price”:“AUD” 这就是我尝试过的:但它不起作用 创建新字段 将价格字段复制到CustomPrice 创建新的自定义字段类型PriceFieldType 也试过 解决方案可以是将原始字段修改或操纵为一个或多个新字段。每个字段交替包含字母和数字部分 我的意思是将数字部分分隔为一个字段,如fieldNumeric,将字母部分分隔

在Solr中,价格值如下所示

"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>