Запрос 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.
Полный пример здесь - это пример приложения электронной коммерции.