Как да превърна заявката, която търси 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. Ще трябва да промените кода си, както следва:-

    <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>

в schema.xml.

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

person Pooja Sutar    schedule 20.05.2015