0

SolrにはSolarimを使用しています。特定の表現の後にドキュメントを検索し、単語を強調表示したい。これが私のコードです:

 // get a select query instance
$query = $client->createSelect();
$query->setQuery('*ac*');

$hl = $query->getHighlighting();
$hl->getField('name')->setSimplePrefix('<b style="background: none repeat scroll 0 0 #6BAE48;color: #FF0000;">')->setSimplePostfix('</b>');
$hl->getField('description')->setSimplePrefix('<u style="background: none repeat scroll 0 0 yellow;">')->setSimplePostfix('</u>');


$resultset = $client->select($query);
$highlighting = $resultset->getHighlighting();
// display the total number of documents found by solr
echo 'NumFound: '.$resultset->getNumFound();

// show documents using the resultset iterator
foreach ($resultset as $document) {

    echo '<hr/><table>';

   foreach($document AS $field => $value)
    {
        $highlightedDoc = $highlighting->getResult($document->id);
        // this converts multivalue fields to a comma-separated string
        if(is_array($value)) $value = implode(', ', $value);

        echo '<tr><th>' . $field . '</th><td>' . $value . '</td></tr>';
    }

    echo '</table><br/><b>Highlighting results:</b><br/>';

    // highlighting results can be fetched by document id (the field defined as uniquekey in this schema)
    $highlightedDoc = $highlighting->getResult($document->id);
    if($highlightedDoc){
        foreach($highlightedDoc as $field => $highlight) {
            deg($highlight);
            echo implode(' (...) ', $highlight) . '<br/>';
        }
    }

}

問題は、結果が次のようになることです。

サンプル

テキスト内の単語を直接強調したい。ありがとうございました!

4

1 に答える 1

0

現在、v4.9 ドラフトまでの Solr は、汎用目的で使用されますが、ハイライト スニペットを返すことのみをサポートしています。また、これはあまり実用的ではないと思いますが、開発チームから、結果セット内のすべてのテキストにハイライト タグを直接埋め込むことをサポートしていないパフォーマンスの問題が考慮されている可能性があります。(注:間違っていたり誤解していたり​​したら訂正してください)

ただし、次のリンクが役立つ場合があります。http://www.beingjavaguys.com/2013/01/how-to-integrate-highlighting-in-search.html

于 2014-06-20T08:52:59.980 に答える