Можем ли мы реализовать Solr с автоматическим предложением без сохранения поля, а только с индексацией - PullRequest
1 голос
/ 15 марта 2011

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

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

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

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

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

Ответы [ 4 ]

3 голосов
/ 19 июля 2011

В Solr 4.0 появился новый компонент под названием 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>
1 голос
/ 17 марта 2011

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

0 голосов
/ 19 июня 2011

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

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

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

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

0 голосов
/ 16 марта 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...