Sunspot/Solr: небуквенные символы

Я использую Solr с Sunspot/dismax. Можно ли запросить неалфавитные символы? То есть:

~ ! @ # $ % ^ & * ( ) _ + - = [ ] { } | \

Я знаю, что +/- нужно экранировать, так как это операторы включения/исключения dismax. Но я не получаю совпадений, когда ищу любой из этих символов:

Foo.search { fulltext '=' }.results.length   # => 0
Foo.search { fulltext '\=' }.results.length  # => 0

Пока что:

Foo.search { fulltext 'a'}.results.length    # => 30

Вот конфигурация токенизатора, которую я использую:

    <fieldType name="text" class="solr.TextField" omitNorms="false">
        <analyzer>
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.StandardFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>

person George Armhold    schedule 11.07.2012    source источник
comment
Какой токенизатор вы используете? Вы уверены, что он не пропускает знаки препинания?   -  person Artur Nowak    schedule 11.07.2012
comment
Обновлен мой вопрос с помощью токенизаторов, используемых для текста.   -  person George Armhold    schedule 12.07.2012


Ответы (1)


Solr StandardTokenizer отбрасывает все «специальные символы», так как он оптимизирован для использования с обычным текстом. Так, например, «=» не будет найден, потому что он удаляется из текста во время индексации.

Одним из токенизаторов, сохраняющих все символы, является WhitespaceTokenizer, который разделяет ввод только по пробелам. . Вам нужно оценить, является ли это хорошим решением вашей проблемы, поскольку оно будет создавать такие токены:

20-летняя лиса перепрыгнула через ленивую собаку. -> «20-летний», «лиса», «прыгает», «над», «тот», «ленивый», «собака».

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

person Artur Nowak    schedule 12.07.2012