Apache Solr поисковая проблема

У меня проблема с поиском в apachesolr.

Например, содержимое, которое я проиндексировал:

  • Тирамису д'ивер
  • Velouté d'hiver
  • Minestrone d'hiver crémeux,
  • Смузи версия Hiver

когда я ищу "Hiver", я получаю только Hiver версии Smoothie в качестве результатов.

Когда я ищу Dhiver, я получаю как результаты

  • Тирамису д'ивер
  • Velouté d'hiver
  • Минестроне д'ивер крем

Мне нужно получить все результаты, ищу ли я hiver или dhiver или dhiver

У кого-нибудь есть идея, в чем проблема? Должен ли я что-то изменить в моем schema.xml?

Моя схема для текстового поля:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory"
            ignoreCase="true"
            words="stopwords.txt"
            />
    <filter class="solr.WordDelimiterFilterFactory" 
          generateWordParts="1" 
          generateNumberParts="1"
          catenateWords="1"
          catenateNumbers="1"
          catenateAll="0"
          splitOnCaseChange="1"
          splitOnNumerics="1"
          preserveOriginal="1"
    />
    <filter class="solr.LengthFilterFactory" min="3" max="100" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="5"/>
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>

  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory"
            ignoreCase="true"
            words="stopwords.txt"
            />
    <filter class="solr.WordDelimiterFilterFactory" 
          generateWordParts="1" 
          generateNumberParts="1"
          catenateWords="1"
          catenateNumbers="0"
          catenateAll="0"
          splitOnCaseChange="1"
          splitOnNumerics="1"
    />
    <filter class="solr.LengthFilterFactory" min="3" max="100" />
    <filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>

  </analyzer>

  <analyzer type="multiterm">
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory"
            ignoreCase="true"
            words="stopwords.txt"
            />
    <filter class="solr.WordDelimiterFilterFactory"
            protected="protwords.txt"
            generateWordParts="1"
            generateNumberParts="1"
            catenateWords="0"
            catenateNumbers="0"
            catenateAll="0"
            splitOnCaseChange="1"
            preserveOriginal="1"/>
    <filter class="solr.LengthFilterFactory" min="2" max="100" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
</fieldType>

1 ответ

Решение

Ммм вкусно.

Во-первых, для решения всех подобных проблем используйте инструмент Solr Analysis - ваш друг. Во-вторых, помните, что Solr совпадает только в том случае, если запрос и термины на 100% состоят из одинаковых символов.

Для следующего фильтра

<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" />

Velouté d'hiver будет проанализирован как

велют | д'ивер | д | Дайвер | пчеловод

Так что будет соответствовать вашему запросу для Hiver - вы можете удалить | д | маркер, который сгенерировал мой фильтр.

Не забудьте сложить символы акцента тоже где-нибудь.

Другие вопросы по тегам