Да, это возможно и относительно просто - вам просто нужно понять, как отобразить 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.
Полный пример: здесь - это пример приложения электронной торговли.