Поиск подстановочных знаков Solr со специальным символом

Мой пользователь хочет искать с помощью специального символа и подстановочного знака. Тире (-) в этом случае.

Поэтому, если я ищу с помощью «xxx» или «xxx\-», я получаю результаты, содержащие xxx- и xxx. Но я не хочу ххх, мне нужны только результаты, которые имеют ххх-. (тире)

Я пробовал искать с xxx-*, не дает никаких результатов.

Схема выглядит так

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="false">
<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
   <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
  <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>

Есть идеи, как этого добиться?


person Crime Master Gogo    schedule 02.02.2021    source источник
comment
можете ли вы конкретно сказать, что вы хотите, когда ищете xxx и xxx-?   -  person Vishal Singh    schedule 04.02.2021
comment
Для чего нужна дополнительная косая черта / в xxx\-?   -  person Vishal Singh    schedule 04.02.2021
comment
@VishalSingh, когда я ищу с помощью xxx-*, я хочу видеть результаты, начинающиеся с xxx-. это означает, что я не хочу видеть результат, который начинается только с xxx. Я хочу, чтобы solr учитывал тире (-). Что касается вашего второго вопроса, я прочитал в документе solr, что (-) является специальным символом, и его нужно экранировать, следовательно, xxx\-   -  person Crime Master Gogo    schedule 04.02.2021
comment
какую версию solr вы используете?   -  person Vishal Singh    schedule 04.02.2021


Ответы (2)


Я достигаю этого следующим

<fieldType name="string" class="solr.StrField" sortMissingLast="true"/>
<field indexed="true" multiValued="false" name="field_name" stored="true" type="string"/>

Поиск с field_name=xxx-* дает мне только поля, начинающиеся с xxx-.

person leventcinel    schedule 02.02.2021

Понимание проблемы.

Стандартный токенизатор
Этот токенизатор разбивает текстовое поле на токены, обрабатывая пробелы и знаки препинания как разделители, а символы-разделители отбрасываются.

В вашем случае - - это знак препинания, поэтому при поиске xxx- нет результатов.

Что вы можете сделать, так это заменить StandardTokenizerFactory на WhitespaceTokenizerFactory, что разделит текстовый поток на пробелы, сохраняя только знаки препинания в токенах.

person Vishal Singh    schedule 04.02.2021
comment
это динамическое поле, в котором я ищу. Он называется answer_t. После того, как я изменил вышеуказанное, как вы упомянули, переиндексировать, перезапустить solr, поле answer_t исчезло. Я не вижу его. - person Crime Master Gogo; 04.02.2021
comment
@CrimeMasterGogo, можете ли вы поделиться схемой ваших динамических полей в своем посте? - person Vishal Singh; 09.02.2021