Автозаполнение SOLR для фразы из нескольких терминов - PullRequest
0 голосов
/ 10 июля 2020

У меня вопрос по автозаполнению в 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?

...