Ошибка HTTP в запросе предложения с использованием Solarium php

#php #solr #solarium

#php #solr #solarium

Вопрос:

Я реализую запрос предложения в php codeigiter с использованием solarium. Но при подключении к createSuggester запросу. Он показывает следующую строку ошибки.

 An uncaught Exception was encountered
Type: SolariumExceptionHttpException

Message: Solr HTTP error: OK (404)
HTTP ERROR 404
Problem accessing /solr/../suggest. Reason:

    Not Found
Filename: C:wampwwwsolariumphpvendorsolariumsolariumsrcCoreQueryResultResult.php

Line Number: 59

Backtrace:

File: C:wampwwwsolariumphpvendorsolariumsolariumsrcCoreClientClient.php
Line: 751
Function: __construct

File: C:wampwwwsolariumphpvendorsolariumsolariumsrcCoreClientClient.php
Line: 783
Function: createResult

File: C:wampwwwsolariumphpvendorsolariumsolariumsrcCoreClientClient.php
Line: 978
Function: execute

File: C:wampwwwsolariumphpapplicationcontrollersExample.php
Line: 30
Function: suggester

File: C:wampwwwsolariumphpindex.php
Line: 315
Function: require_once
  

Мой пример кода здесь,

 $query = $this->client->createSuggester();
$query->setQuery('ap ip v'); //multiple terms
$query->setDictionary('suggester');
// $query->setOnlyMorePopular(true);
$query->setCount(10);
// $query->setCollate(true);

// this executes the query and returns the result
$resultset = $this->client->suggester($query);

echo '<b>Query:</b> '.$query->getQuery().'<hr/>';

// display results for each term
foreach ($resultset as $term => $termResult) {
    echo '<h3>' . $term . '</h3>';
    echo 'NumFound: '.$termResult->getNumFound().'<br/>';
    echo 'StartOffset: '.$termResult->getStartOffset().'<br/>';
    echo 'EndOffset: '.$termResult->getEndOffset().'<br/>';
    echo 'Suggestions:<br/>';
    foreach ($termResult as $result) {
        echo '- '.$result.'<br/>';
    }

    echo '<hr/>';
}

// display collation
echo 'Collation: '.$resultset->getCollation();

  

Я пытаюсь найти решение во многих ресурсах. Но решения нет. Пожалуйста, объясните мне, что / почему возникла эта проблема?

Комментарии:

1. /solr/../ Действительно ли URL-адрес отображается, или вы что-то удалили здесь? Поскольку, похоже, отсутствует имя ядра / коллекции, это то, что в первую очередь дает вам 404

2. Url есть solr/test_core/suggest. .

3. В этом случае вы добавили обработчик /suggest запросов, как показано в справочном руководстве ? В качестве части примеров ядер (techproducts iirc), поставляемых с Solr, доступна готовая к копированию конфигурация.

4. Я пробую это решение. Но solarium suggester не возвращает результата.

5. Любой, кто поможет мне, как получить значение от solarium

Ответ №1:

вы можете установить словарь по умолчанию в «solrconfig.xml » вот так:

 <searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
    <str name="name">mySuggester</str>
    <str name="lookupImpl">FreeTextLookupFactory</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">content</str>
    <str name="suggestFreeTextAnalyzerFieldType">suggestTypeLc</str>
    <str name="buildOnStartup">true</str>
    <str name="buildOnCommit">false</str>
</lst>
</searchComponent>

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

и удалите эту строку из своего кода :

 $query->setDictionary('suggester');
  

Ответ №2:

не 'suggester' в $query->setDictionary('suggester') , пожалуйста, используйте имя предлагающего, например $query->setDictionary('mySuggester')