Компонент "автозаполнения" Solr Suggester с PHP - PullRequest
1 голос
/ 16 февраля 2012

Я использую apache-solr-3.5.0 и хочу создать что-то вроде: http://www.kaufda.de/Berlin

(предложение фразы)

Я использовал подсказку - (гибкий компонент автозаполнения для Solr)

Как описано в этой статье: http://css.dzone.com/news/solr-and-autocomplete-part-2

Это мой solrconfig:

<searchComponent name="suggest" class="solr.SpellCheckComponent">
 <lst name="spellchecker">
  <str name="name">suggest</str>
  <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
  <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
  <str name="field">name_autocomplete</str>
 </lst>
</searchComponent>

<requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler">
 <lst name="defaults">
  <str name="spellcheck">true</str>
  <str name="spellcheck.dictionary">suggest</str>
  <str name="spellcheck.count">10</str>
 </lst>
 <arr name="components">
  <str>suggest</str>
 </arr>
</requestHandler>

Shema.xml

<fieldType class="solr.TextField" name="text_auto">
 <analyzer>
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
 </analyzer>
</fieldType>

<field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/>
<field name="name" type="text" indexed="true" stored="true" multiValued="false" />
<field name="name_autocomplete" type="text_auto" indexed="true" stored="true" multiValued="false" />
<field name="description" type="text" indexed="true" stored="true" multiValued="false" />

<copyField source="name" dest="name_autocomplete" />

На моем php-коде:

$solr = $this->getSolr();
$response = NULL;

if (!$solr) {
 return;
}

$params = array();
$params['spellcheck.build'] = 'true';
$params['spellcheck'] = 'true';
$params['qt'] = '';

$result = $solr->search( 'har', 0, 10, $params );

Результатом является массив без предложения.

Как я могу использовать Offerter с php?

Заранее благодарим за помощь

Приветствия

Ответы [ 4 ]

1 голос
/ 18 марта 2016

Вместо использования компонента проверки орфографии вы можете использовать сам компонент подсказки.

<searchComponent name="suggest" class="solr.SuggestComponent">
        <lst name="suggester">
  <str name="name">mySuggester</str>
  <str name="lookupImpl">AnalyzingInfixLookupFactory</str>      <!-- org.apache.solr.spelling.suggest.fst -->
  <str name="lookupImpl">FuzzyLookupFactory</str>  
  <str name="dictionaryImpl">DocumentDictionaryFactory</str>     <!-- org.apache.solr.spelling.suggest.HighFrequencyDictionaryFactory -->
  <str name="field">name</str>
  <str name="weightField">price</str>
  <str name="suggestAnalyzerFieldType">text_general</str>
  <int name="maxEdits">2</int>
 </lst>
</searchComponent>

<requestHandler name="/suggest" class="solr.SearchHandler"  startup="lazy">
<lst name="defaults">
<str name="df">text</str>
  <str name="suggest">true</str>
  <str name="suggest.count">10</str>
  <str name="suggest.dictionary">mySuggester</str>
</lst>
<arr name="last-components">
  <str>suggest</str>
</arr>
</requestHandler>

Примечание: AnalyzingInfixLookupFactory также позволяет искать инфиксы. Предположим, что ваш элемент поиска Squash , а пользователь вводит uash , Squash будет предоставлен в качестве предложения.

FuzzyLookupFactory позволит вам предоставить подсказку, даже если пользователь допустит орфографическую ошибку.

Это изменения, которые нужно сделать в файле solrconfig.xml, создание экземпляра из php хорошо объяснено и в других ответах на этой странице. Поэтому я пропускаю эту часть. Надеюсь, это поможет.

РЕДАКТИРОВАТЬ : Вам также нужно будет написать службу подсказок в Service.php , которая очень похожа на службу поиска, если вы хотите вместо этого создать экземпляр как $result = $solr->**suggest**( 'har', 0, 10, $params ); из $result = $solr->**search**( 'har', 0, 10, $params );

0 голосов
/ 18 февраля 2012

Проверьте http://www.cominvent.com/2012/01/25/super-flexible-autocomplete-with-solr/ для еще более гибкого предложения.

Также не рекомендуется создавать словарь (spellcheck.build = true) каждый раз, когда вы запрашиваете предложение.

0 голосов
/ 22 февраля 2012

После поиска и со всей вашей помощью я нашел решение.

Параметры верны.

URL: http://localhost:8983/solr/suggest?q=har&spellcheck=true&spellcheck.collate=true&spellcheck.build=true дать хороший результат

В своем php-коде я добавил параметр qt со значением '/ offer'

Новый код

$solr = $this->getSolr();
$response = NULL;

if (!$solr) {
 return;
}

$params = array();
$params['spellcheck.build'] = 'true';
$params['spellcheck'] = 'true';
$params['qt'] = '/suggest';

$result = $solr->search( 'har', 0, 10, $params );

Я ценю вашу помощь,

Приветствия

0 голосов
/ 16 февраля 2012

Вы пытались сделать тест непосредственно на solr? Это было бы лучше, чтобы увидеть, если значения генерируются правильно, а затем вы можете отладить код PHP.

Вы можете увидеть значения, набрав:

http://localhost:8983/solr/suggest?q=har&spellcheck=true&spellcheck.collate=true&spellcheck.build=true

Возможно, вам придется изменить порт, если вы не используете конфигурацию по умолчанию.

...