简体   繁体   中英

HTTP error issue in suggest query using Solarium php

I'm implement suggest query in php codeigiter using solarium. But while connect to the createSuggester query. It shows following error line.

An uncaught Exception was encountered
Type: Solarium\Exception\HttpException

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

    Not Found
Filename: C:\wamp\www\solariumphp\vendor\solarium\solarium\src\Core\Query\Result\Result.php

Line Number: 59

Backtrace:

File: C:\wamp\www\solariumphp\vendor\solarium\solarium\src\Core\Client\Client.php
Line: 751
Function: __construct

File: C:\wamp\www\solariumphp\vendor\solarium\solarium\src\Core\Client\Client.php
Line: 783
Function: createResult

File: C:\wamp\www\solariumphp\vendor\solarium\solarium\src\Core\Client\Client.php
Line: 978
Function: execute

File: C:\wamp\www\solariumphp\application\controllers\Example.php
Line: 30
Function: suggester

File: C:\wamp\www\solariumphp\index.php
Line: 315
Function: require_once

My sample code is here,

$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();

I'm try to find solution in many resources. But the solution is not there. Plese explain me what/why this issue is happened?

you can set the default dictionary in "solrconfig.xml" like this:

<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>

and remove this line from your code:

$query->setDictionary('suggester');

not 'suggester' at $query->setDictionary('suggester') ,please use the name of the suggester like $query->setDictionary('mySuggester')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM