SOLR: Как отсортировать по цене, если цена не добавлена ​​правильно? - PullRequest
0 голосов
/ 21 февраля 2020

В Solr значения цен указаны ниже

"Price":"0.07 AUD"
"Price":"10.00"
"Price":"AUD"

Так что при сортировке я хочу игнорировать "Price":"AUD"

Это то, что я пробовал: но это не работает.

Создать новое поле

<field name="CustomPrice" type="PriceFieldType" indexed="true"/>

Скопировать поле цены в CustomPrice

  <copyField source="Price" dest="CustomPrice"/>

Создать новое пользовательское поле Тип поля PriceFieldType

<fieldType name="PriceFieldType" class="solr.TextField">
     <analyzer>
      <tokenizer class="solr.PatternTokenizerFactory" pattern="(AUD?):?\s(\[0-9-\]+)" />
     </analyzer>
  </fieldType>

Получить ссылку отсюда:

https://lucene.apache.org/solr/guide/6_6/tokenizers.html#Tokenizers -RegularExpressionPatternTokenizer

Также пробовал

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

1 Ответ

1 голос
/ 21 февраля 2020

Решением может быть изменение или манипулирование исходным полем в одном или нескольких новых полях. Каждое поле содержит поочередно алфавит c и цифру c часть.

Я имею в виду разделение нумерации c части на одно поле, например fieldNumeric, и части алфавита на другое поле, например fieldAlpha. .

Таким образом вы можете сортировать выходные данные, передавая список полей в нужном вам порядке в стандартное предложение запроса сортировки. Например:

sort= fieldNumeric asc, fieldAlpha asc

Но разделение значения не обязательно. Вы можете оставить одно поле с исходным значением и иметь другое поле с числовым значением c. Вы можете добиться извлечения значения numberi c, отфильтровав данные.

Я создал следующий тип поля

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

Вот моя страница анализа выглядит так:

Solr Analysis Page

Вот страница запроса:

Solr Query Page

Вот страница запроса с сортировкой по цена.

Solr Query Page with Sorting

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...