SOLR Нечувствительный к регистру поиск

У меня проблема в SOLR Search.
У меня есть такие данные:
 enter image description here

Я использую solr admin, чтобы найти эти данные, используя такой запрос:

address_s:*Nadi*

и нашел эти данные. Но когда я использую этот запрос:

address_s:*Nadi*

он ничего не нашел.
У меня есть googling, и я нашел ответ, чтобы создать поле со следующим script:

<fieldType name="c_text" class="solr.TextField">
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>

    <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

Я скопирую эти теги script в schema.xml, но он все равно не работает. Что мне делать? Кто-нибудь может мне помочь?

Ответы

Ответ 1

Поле address_s должно быть определено как -

<field name="address_s" type="c_text" indexed="true" stored="true"/>

Если вы используете файл schema.xml по умолчанию, эта защита должна появиться раньше -

<dynamicField name="*_s"  type="string"  indexed="true"  stored="true"/>

который определяет его как тип поля строки без проведенного анализа.

Подстановочные запросы не подвергаются анализу.
Поэтому, если вы примените фильтр нижних регистров при запросе индекса времени address_s:*nadi*, то работайте.
Тем не менее, запрос address_s:*Nadi * не будет, поскольку Nadi не будет соответствовать Nadi в индексе, и вам нужно будет уменьшить регистр запросов на стороне клиента.

Ответ 2

Использует ли ваше поле address_s этот тип поля c_text в файле schema.xml?

Если ваш индекс был создан с предыдущей конфигурацией, вам необходимо повторно проиндексировать все, чтобы принять изменения.

Ответ 3

Я использовал это как тип поля:

<fieldType name="string" class="solr.TextField">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

И определил мои поля, используя:

<field name="address" type="string" indexed="true" stored="true"/>

Результат: Мой документ возвращает поля в правильном случае (например, вставлен), и я могу искать регистр без учета регистра (используя буквы верхнего и нижнего регистра)...

Версия: Solr 3.6

Ответ 4

Я использовал что-то вроде этого... В schema.xml я поместил новый fieldType

<fieldType name="newType" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ReversedWildcardFilterFactory" />
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ReversedWildcardFilterFactory" />
      </analyzer>
 </fieldType>

Назначьте новый тип полю, которое вы хотите сделать его случайным и без пробелов Затем вы должны построить запрос solr в форме: fieldName:(*fieldValue\ *)

Ответ 5

вместо type="string" определить поле type="text_general" (как определено в файле schema.xml по умолчанию). По его свойству ignore case=true

Ответ 6

Как вы делаете регистр нечувствительным к коллекции, которая использует динамическую схему (или схему, управляемую данными)? Коллекция была создана как: su - solr -c "/opt/solr/bin/solr create -c Mock2 -n data_driven_schema_configs"