2015-10-02 3 views
0

Я использую spring-data-solr (version = 1.4.0.RELEASE) для поиска поля, содержащего дефис, но получающего нулевые результаты. Одно из моих индексированных полей содержит значение как «Wal-mart», и когда я ищу «wal», он дает правильный результат, но при поиске «wal-» я получаю нулевые результаты. Раньше я пытался добавить символ обратной косой черты - но это не помогло. Может кто-нибудь, пожалуйста, сообщите, что может быть проблемой здесь?Solr: Поиск в поле, содержащем дефис

Ниже приведен снимок моей схемы.xml.

  <fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <!-- in this example, we will only use synonyms at query time 
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
    --> 
    <!-- Case insensitive stop word removal. 
    --> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="lang/stopwords_en.txt" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="lang/stopwords_en.txt" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
</fieldType> 
+0

Вы не указали определение индексатора индекса – MatsLindh

+0

@MatsLindh - добавили определение анализатора индекса –

+0

Какова ваша реализация spring-data-solr? как вы получаете результаты solr? –

ответ

4

Добавьте = параметр preserveOriginal «1» в WordDelimiterFilterFactory как на индексе и анализаторы запросов. В настоящее время generateWordParts оставит вас с Wal и Mart из Wal-Mart. preserveOriginal добавит оригинальный термин Wal-Mart для поиска.

+0

Спасибо! добавление preserveOriginal = "1" исправило проблему. –

+0

Не беспокойтесь - не стесняйтесь отмечать это как ответ :) –

 Смежные вопросы

  • Нет связанных вопросов^_^