Как превратить запрос, который ищет данные SOLR, в нижний регистр?

Моя схема.xlm выглядит так:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>      
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>      
</fieldType>

<!-- The searched field -->
<field name="product_name" type="text" indexed="true" stored="true"/>

Это должно индексировать поле в нижнем регистре, а также преобразовать поисковый запрос в нижний регистр.

Данные, которые я хочу найти: «Nokia Lumia 610».

Когда я ищу «Nokia», я получаю ожидаемый результат, но при поиске только «Nokia» (верхний регистр N) результатов нет.

Вышеупомянутый «анализатор» выполняет строчные буквы только для индекса, но не для поискового запроса.

Это ошибка? Как заставить индексы SOLR и поисковый запрос быть в нижнем регистре?


person tasmaniski    schedule 16.03.2013    source источник
comment
Повторите запрос с помощью debugQuery=true и вставьте проанализированные запросы сюда.   -  person nikhil500    schedule 17.03.2013


Ответы (2)


Преобразование поискового запроса также зависит от типа запроса и используемого анализатора. Например, приведенное выше не будет преобразовывать ваш поисковый запрос в нижний регистр, если вы отправляете запрос в анализатор выбора. Если вы отправляете запрос: -

http://url/solr/select?q=Nokia

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

    <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
            <analyzer type="index">
                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>      
            <analyzer type="query">
                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>
            <analyzer type="select">
                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>
    </fieldType>

если вышеуказанное не работает, опубликуйте запрос, который вы отправляете, и результат добавления debugQuery=true к запросу.

person Max    schedule 17.03.2013

Вместе с

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
            <analyzer type="index">
                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>      
            <analyzer type="query">
                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>
            <analyzer type="select">
                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>
    </fieldType>

в схеме.xml.

В файле head.vm измените return $("#q").val(); на return $("#q").val().toLowerCase(); для функции автозаполнения InCaseSensitive. Так что вы можете получить результат, если вы ищете с заглавными буквами.

person Pooja Sutar    schedule 20.05.2015