Запрос DSE CQL для Solr Suggestor - PullRequest
0 голосов
/ 11 июня 2018

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

1 Ответ

0 голосов
/ 11 июня 2018

Да, это возможно и относительно просто - вам просто нужно понять, как отобразить 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 значение true.Или вы можете настроить его так, чтобы он создавал индекс подсказок при запуске и т. Д. - см. Документацию Solr.

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

...