Я пытаюсь реализовать автозаполнения функцию с помощью 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/
Я могу получить предложения сейчас от начала значения. Но я также хочу включить предложения из слова, присутствующего в середине. Но запрос: 'http: // localhost: 8983/solr/products/suggest? Suggest = true & suggest.build = true & wt = json & suggest.q = Pan' не дает никаких результатов. –
Какова текущая реализация 'lookupImpl', которую вы используете? – YoungHobbit
FuzzyLookupFactory Поскольку вышеупомянутая конфигурация не работает, я переключился на получение предложений из поля имени, а не из поля копирования, в котором включено n грамм. –