Solr (солнечное пятно) Запрос с дефисом и стоп-словами - PullRequest
2 голосов
/ 12 марта 2012

Я использую драгоценный камень Ruby Sunspot с Solr 1.4.1

У меня проблема с поиском с дефисом.

Когда я запускаю поиск "foo bar bla", возвращается ожидаемый результат.

Если в поисковом запросе добавлен дефис, например "foo - bar bla", результат не возвращается.

Я добавил дефисы в свой список стоп-слов и несколько раз подправил свой файл schema.xml за последние несколько дней, но безрезультатно.

Для тех, кто подвержен воздействию Sunspot, у меня установлено минимальное совпадение слов, равное 3, что совпадает с настройкой той же конфигурации mm в файле solrconfig.xml, например: 3

Так выглядят соответствующие части моего файла schema.xml.

    <!-- *** This fieldType is used by Sunspot! *** -->
<fieldType name="string" class="solr.StrField" tokenized="true" omitNorms="true" sortMissingLast="true">
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
  </analyzer>
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false" />
    <filter class="solr.PorterStemFilterFactory"/>
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" side="front"/>
  </analyzer>
</fieldType>

<!-- *** This fieldType is used by Sunspot! *** -->
<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
  </analyzer>
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false" />
    <filter class="solr.PorterStemFilterFactory"/>
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" side="front"/>
  </analyzer>
</fieldType>

Любая помощь или предложения будут высоко оценены.

Спасибо

1 Ответ

6 голосов
/ 12 марта 2012

Символ дефиса (-) - это оператор Solr, используемый для исключения результатов, соответствующих слову, которое следует за оператором. Я не думаю, что добавление дефиса в список стоп-слов повлияет на это. Я бы предложил удалить дефисы перед выполнением запроса через Solr. Я думаю, что происходит, что результат с дефисом исключает документы, которые соответствуют "бар"? Возможно, вы могли бы попытаться оценить результаты, чтобы увидеть, так ли это на самом деле.

...