Запрос DSE CQL для Solr Suggestor

Я использую версию DSE 5.0.1. Ранее мы использовали фасетный запрос для отображения поисковых предложений. По соображениям производительности, ищем другие альтернативы, чтобы получить предложения и найти компонент подсказки для поиска. Но я не смог найти примеры, где компонент подсказки используется из запроса CQL. Это возможно, верно? Может кто-нибудь помочь мне в этом. Заранее спасибо.

1 ответ

Решение

Да, это возможно и относительно просто - вам просто нужно понять, как отобразить XML, который вы хотите вставить в сгенерированный solrconfig.xml в JSON, который используется для конфигурации.

Например, мы хотим настроить подсказку для предложения по данным из поля titleи использовать дополнительные веса из rating поле. Согласно документации Solr, фрагмент XML должен выглядеть следующим образом:

  <searchComponent class="solr.SuggestComponent" name="suggest">
    <lst name="suggester">
      <str name="name">titleSuggester</str>
      <str name="lookupImpl">AnalyzingInfixLookupFactory</str>
      <str name="dictionaryImpl">DocumentDictionaryFactory</str>
      <str name="suggestAnalyzerFieldType">TextField</str>
      <str name="field">title</str>
      <str name="weightField">rating</str>
      <str name="buildOnCommit">false</str>
      <str name="exactMatchFirst">true</str>
      <str name="contextField">country</str>
    </lst>
  </searchComponent>
  <requestHandler class="solr.SearchHandler" name="/suggest">
    <arr name="components">
      <str>suggest</str>
    </arr>
    <lst name="defaults">
      <str name="suggest">true</str>
      <str name="suggest.count">10</str>
    </lst>
  </requestHandler>

В CQL он будет конвертирован

ALTER SEARCH INDEX CONFIG ON table ADD 
  searchComponent[@name='suggest',@class='solr.SuggestComponent'] 
  WITH  $$ {"suggester":[{"name":"titleSuggester"}, 
   {"lookupImpl":"AnalyzingInfixLookupFactory"}, 
   {"dictionaryImpl":"DocumentDictionaryFactory"},
   {"suggestAnalyzerFieldType":"TextField"}, 
   {"field":"title"}, {"weightField":"rating"}, 
   {"buildOnCommit":"false"}, {"exactMatchFirst":"true"},
   {"contextField":"country"}]} $$;

ALTER SEARCH INDEX CONFIG ON table ADD 
  requestHandler[@name='/suggest',@class='solr.SearchHandler'] 
  WITH  $$ {"defaults":[{"suggest":"true"}, 
    {"suggest.count":"10"}],"components":["suggest"]} $$;

После этого вам не нужно забывать выполнить:

RELOAD SEARCH INDEX ON table;

И ваш советчик будет работать. В моем примере, индекс для предлагающего должен быть построен явно, потому что инвентарь не изменяется очень часто. Это делается с помощью HTTP-вызова следующим образом:

curl 'http://localhost:8983/solr/keyspace.table/suggest?suggest=true&suggest.dictionary=titleSuggester&suggest.q=Wat&suggest.cfq=US&wt=json&suggest.build=true&suggest.reload=true'

Но вы можете контролировать это, установив buildOnCommit к истине. Или вы можете настроить его так, чтобы он создавал индекс подсказок при запуске и т. Д. - см. Документацию Solr.

Полный пример здесь - это пример приложения электронной коммерции.

Другие вопросы по тегам