Можем ли мы реализовать автоматическое предложение Solr без сохранения поля, а только с индексацией

Я предполагаю реализовать автоматическое предложение/завершение в стиле Google с помощью Solr. У меня есть 2 вопроса, связанных с этим:

  1. Возможно ли, что мы только индексируем, но не сохраняем поле, для которого предполагается запуск автозаполнения или запуск компонента терминов!

  2. Можем ли мы использовать несколько полей для выборки данных для заполнения автоматических предложений, и если да, то можем ли эти поля использовать только как индекс, а не как сохраненные!

Я был бы очень рад, если бы кто-нибудь применил это и попробовал такую ​​реализацию и мог бы мне помочь.

Спасибо, Саиф.


person Saif Ahmad    schedule 15.03.2011    source источник


Ответы (4)


В Solr 4.0 появился новый компонент под названием Suggester. Он использует компонент проверки орфографии для создания предложений на основе вашего существующего индекса.

Suggester — Solr Wiki

Я все еще настраиваю свой тип поля для компонента Suggester, но вот то, что у меня есть до сих пор, и это, кажется, работает довольно хорошо.

    <fieldtype name="textSuggest" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.PatternReplaceFilterFactory"
               pattern="(^[^A-Za-z0-9]*|[^A-Za-z0-9]*$)" replacement=""  replace="all" />
            <filter class="solr.LengthFilterFactory" min="2" max="60" />
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false" />
            <filter class="solr.ShingleFilterFactory" maxShingleSize="3" outputUnigrams="true" outputUnigramIfNoNgram="true" />
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false" />
            <filter class="solr.ShingleFilterFactory" maxShingleSize="99" outputUnigrams="false" outputUnigramIfNoNgram="true" />
        </analyzer>
    </fieldtype>
person Jared Laprise    schedule 19.07.2011
comment
Хороший ответ, я хотел бы отметить, что Suggester доступен в Solr, начиная с версии 3.1, а не только в 4.0. - person javanna; 16.02.2012

Вы ищете SollrTermsComponent, который можно запросить для возврата терминов, присутствующих в проиндексированном поле, вместе с их частотами. В частности, вам нужен параметр terms.prefix, который будет возвращать все термины, начинающиеся с указанного вами префикса.

person Nick Zadrozny    schedule 17.03.2011
comment
Я работаю над более подробным руководством по автозаполнению с помощью TerminalsComponent по адресу websolr.com/guides/. client-rsolr-autocomplete-termscomponent — не стесняйтесь задавать мне дополнительные вопросы, пока я конкретизирую черновик. - person Nick Zadrozny; 09.04.2011

В SOLR для автозаполнения вы должны определить поле ngram, которое вы ищете, как сохраненное, чтобы значения возвращались.

Также я думаю, что в SOLR нет возможности получать данные из нескольких полей и извлекать из них один ngram. Более простым способом было бы создать одно поле и скопировать данные из всех других полей, которые вы хотите использовать, в это поле, а затем применить к нему токенизацию ngram.

person Prasanna    schedule 16.03.2011

Solr позволяет использовать поле копирования в качестве индекса для автозаполнения. это пример из моей работы в solr auto-suggest/auto-complete, <copyField source="name" dest="text"/>. Очевидно, что solr будет индексировать только то поле, которое вы будете использовать в автозаполнении.

С другой стороны, вы не можете получить поля, если они не сохранены, и здесь я имею в виду исходные поля, а не скопированные. Я предлагаю скопировать доступное для поиска поле ex: name, а затем получить все остальные поля на основе самого запроса. Вам необходимо создать собственный обработчик поиска и обработчик запросов.

Позже я отредактирую это с полным решением.

вы можете использовать эту статью, чтобы узнать больше о предмете, а затем расширить свое решение. http://solr.pl/en/2010/10/18/solr-and-autocomplete-part-1/

person Khaled    schedule 19.06.2011