2015-09-30 7 views
2

Я пытаюсь реализовать автозаполнения функцию с помощью Solr 5.3.0Как получить предложения в Solr 5.3.0

solrconfig.xml выглядит следующим образом

<searchComponent name="suggest" class="solr.SuggestComponent"> 
    <lst name="suggester"> 
    <str name="name">default</str> 
    <str name="lookupImpl">FuzzyLookupFactory</str> 
    <str name="dictionaryImpl">DocumentDictionaryFactory</str> 
    <str name="field">suggest_ngram</str> 
    <str name="weightField">price</str> 
    <str name="suggestAnalyzerFieldType">text_suggest_ngram</str> 
    <str name="buildOnStartup">true</str> 
    </lst> 
</searchComponent> 

<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy" > 
<lst name="defaults"> 
    <str name="suggest">true</str> 
    <str name="suggest.count">10</str> 
</lst> 
<arr name="components"> 
    <str>suggest</str> 
</arr> 

управляемых схем выглядит например:

<fieldType name="text_suggest_ngram" class="solr.TextField" positionIncrementGap="100"> 
<analyzer type="index"> 
<tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EdgeNGramFilterFactory" maxGramSize="10" minGramSize="2" /> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldType> 


<field name="suggest_ngram" type="text_suggest_ngram" indexed="true" stored="false"/> 
<field name="name" type="string" multiValued="false" indexed="true" stored="true"/> 
<field name="price" type="tlong" multiValued="false" indexed="true" stored="true"/> 
<copyField source="name" dest="suggest_ngram"/> 

Теперь, когда я использую анализатор из панели администрирования Solr, я вижу индекс d ngrams. И он успешно указывает на матч.

Однако, когда я использую запрос:

http://localhost:8983/solr/products/suggest?suggest=true&suggest.build=true&wt=json&suggest.q=Jind 

я получаю 0 предложений. Ответ здесь: https://api.myjson.com/bins/47r3i

Там существует значение «Джиндэл Panther» для ключа имя в одном из документации.

Кроме того, я обнаружил, что если я создаю фиктивное копирование «предлагаю» с типом как «String», источник с именем «имя», любое предложение, которое отлично работает на «имя», не будет работать над «предложением». Может ли это быть какая-то неправильная конфигурация для копирования предложений?

Любая помощь будет оценена по достоинству. Спасибо заранее.

EDIT: Получил решение. См. Принятый ответ и его комментарии ниже. Существует блог, с которым я столкнулся, который прекрасно объясняет «Предложения». Это определенно стоит прочитать для новичка в Solr Search.

https://lucidworks.com/blog/2015/03/04/solr-suggester/

ответ

4

поле, на котором вы хотите настроить Suggester должен быть store=true. Его не нужно индексировать. Конфигурация тестировщика будет создавать словарь в соответствии с конфигурацией обеспечения в suggestComponet. Поле name хранится как true, где suggest_ngram нет. Вам необходимо обновить конфигурацию схемы, как это:

<field name="suggest_ngram" type="text_suggest_ngram" indexed="false" stored="true"/> 

Кроме того, необходимо обеспечить параметр suggest.dictionary, словарь, который вы используете для предложений. Для вас это имена: default.

http://localhost:8983/solr/products/suggest?suggest=true& 
     suggest.build=true& 
     wt=json& 
     suggest.dictionary=default& 
     suggest.q=Jind 

ИЛИ вы можете предоставить словарь конфигурации в requestHandler из /suggest:

<str name="suggest.dictionary">default</str> 
+0

Я могу получить предложения сейчас от начала значения. Но я также хочу включить предложения из слова, присутствующего в середине. Но запрос: 'http: // localhost: 8983/solr/products/suggest? Suggest = true & suggest.build = true & wt = json & suggest.q = Pan' не дает никаких результатов. –

+0

Какова текущая реализация 'lookupImpl', которую вы используете? – YoungHobbit

+0

FuzzyLookupFactory Поскольку вышеупомянутая конфигурация не работает, я переключился на получение предложений из поля имени, а не из поля копирования, в котором включено n грамм. –