Поиск Apache Solr возвращает результаты для журнала, когда запрашивается låg, lög и т. Д. (UTF-8 символов) - PullRequest
0 голосов
/ 16 января 2012

У меня есть сайт с Drupal, apache solr и tomcat в качестве хоста для apache solr.Я отредактировал tomcat schema.xml, чтобы включить поддержку utf-8.И это позволило искать символы utf-8.

Однако фактический набор результатов работает неожиданно.При поиске содержимого с использованием символов utf-8 apache solr также возвращает содержимое с «эквивалентным» символом.

Пример При поиске lag (law) возвращается содержимое с låg (low).Очень разные вещи по-шведски.Это возможно для конфигурации.И в таком случае, где?

Ответы [ 3 ]

1 голос
/ 16 января 2012

Это настраивается с помощью Solr. когда Solr индексирует запись (см. type = "index"), он использует анализаторы и фильтры, которые вы определили в своей схеме. Более того, когда вы выполняете поиск (см. Type = "query"), поиск снова будет проанализирован queryAnalyzer и фильтрами. Это то, что определено в схеме. Я бы предложил использовать прямой веб-интерфейс Solr и проанализировать ваш запрос, а также процедуру индексирования.

например:

 <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" expand="false" ignoreCase="true" synonyms="synonyms.txt"/>
    <filter class="solr.StopFilterFactory" enablePositionIncrements="true" ignoreCase="true" words="stopwords.txt"/>
    <filter catenateAll="0" catenateNumbers="1" catenateWords="1" class="solr.WordDelimiterFilterFactory" generateNumberParts="1" generateWordParts="1" splitOnCaseChange="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
    <filter class="solr.StopFilterFactory" enablePositionIncrements="true" ignoreCase="true" words="stopwords.txt"/>
    <filter catenateAll="0" catenateNumbers="0" catenateWords="0" class="solr.WordDelimiterFilterFactory" generateNumberParts="1" generateWordParts="1" splitOnCaseChange="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>

например, мы можем добавить solr.ISOLatin1AccentFilterFactory для замены акцентированных символов в наборе символов ISO Latin 1 (ISO-8859-1) их безударным эквивалентом

Я бы посоветовал еще раз взглянуть на вашу схему.

1 голос
/ 16 января 2012

Похоже, в вашей схеме есть настройка ASCIIFoldingFilterFactory.

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.ASCIIFoldingFilterFactory

0 голосов
/ 02 февраля 2012

ОК, спасибо вам обоим!

Раскомментирование

<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>

Раскомментирование строки выше в type = "index" och type = "query" добилось цели.

примечание <!-- ниже

 <analyzer type="query">
    <!--
    <filter class="solr.ASCIIFoldingFilterFactory"/>
    <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"
            enablePositionIncrements="true"
            />
    <filter class="solr.WordDelimiterFilterFactory"
            protected="protwords.txt"
            generateWordParts="1"
            generateNumberParts="1"
            catenateWords="0"
            catenateNumbers="0"
            catenateAll="0"
            splitOnCaseChange="1"
            preserveOriginal="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
</fieldType>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...