У меня вопрос по автозаполнению в Solr - скажем, есть строка из нескольких слов «хороший дешевый ноутбук», которую следует предлагать пользователям, если они набирают «хороший», «дешевый» или «ноутбук». Как добиться этого с помощью Solr?
Я пытаюсь перейти на SOLR код, который в настоящее время работает с ElasticSearch - для ES сопоставление предоставляется с типом «завершение», для которого я настраиваю все перестановки терминов во фразе в качестве входных данных для поиска, а в выходных - исходная фраза. Не удалось найти в документации, если / как это возможно с помощью SOLR.
EDIT:
Я попытался добавить следующее в solrconfig. xml:
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">mySuggester</str>
<str name="lookupImpl">FuzzyLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">name</str>
<!--str name="weightField">price</str-->
<str name="suggestAnalyzerFieldType">string</str>
<str name="buildOnStartup">false</str>
</lst>
</searchComponent>
<requestHandler name="/suggest" class="solr.SearchHandler"
startup="lazy" >
<lst name="defaults">
<str name="suggest.dictionary">mySuggester</str>
<str name="suggest">true</str>
<str name="suggest.count">10</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
И следующее для управляемой схемы:
<field name="productNameId" type="string" indexed="true" stored="true"/>
<field name="aspectId" type="pint" indexed="true" stored="true"/>
<field name="name" type="text_general" indexed="true" stored="true"/>
<field name="categoryId" type="string" indexed="true" stored="true"/>
Затем проиндексировал 3 документа с помощью solrj:
String urlString = "http://localhost:8983/solr/aspects";
HttpSolrClient client = new HttpSolrClient.Builder(urlString).build();
client.setParser(new XMLResponseParser() );
ProductAspects pa1 = new ProductAspects();
pa1.setId("1");
pa1.setAspectId(1);
pa1.setName("alice");
ProductAspects pa2 = new ProductAspects();
pa2.setId("2");
pa2.setAspectId(2);
pa2.setName("alza");
ProductAspects pa3 = new ProductAspects();
pa3.setId("3");
pa3.setAspectId(3);
pa3.setName("alza bob");
final UpdateResponse res1 = client.addBean( pa1 );
final UpdateResponse res2 = client.addBean( pa2 );
final UpdateResponse res3 = client.addBean( pa3 );
UpdateResponse res = client.commit();
После этого я ожидал, что ввод «alz» вернет только 2 документа, но он возвращает все 3 документа:
http://localhost:8983/solr/aspects/suggest?suggest.dictionary=mySuggester&suggest=true&suggest.build=true&suggest.q=alz
Не могли бы вы помочь, какая правильная конфигурация для автозаполнения с Solr?