ホームページ > バックエンド開発 > PHPチュートリアル > SOLRでSolariumを使用して検索 - Advanced

SOLRでSolariumを使用して検索 - Advanced

William Shakespeare
リリース: 2025-02-21 10:20:13
オリジナル
448 人が閲覧しました

SOLRでSolariumを使用して検索 -  Advanced

これは、SolariumとともにApacheのSolr検索実装を使用するシリーズの4番目の最後の部分です。PHPライブラリは、まるでそれがネイティブであるかのようにアプリケーションに統合します。

solrとsolariumをインストールして構成し、映画を検索するためのサンプルアプリケーションの構築を開始しました。また、ファセット検索を調べました。

キーテイクアウト

SolRのハイライト機能をSolariumで利用して、ドキュメントで一致した単語またはフレーズをマークすることにより、検索結果の可視性を強化し、フルとスニペットベースのハイライトオプションの両方を提供します。

solrのesssonspresserコンポーネントを使用してオートコンプリート機能を検索アプリケーションに統合します。これにより、パターンマッチングのインデックスフィールドを分析して、クエリ項を動的に提案します。
    ソラリウムでクエリをセットアップするためのアレイベースの構成を採用し、検索パラメーターと結果処理の詳細なカスタマイズを可能にします。
  • COREを追加することによりSOLRの機能を拡張します。これには、特定のディレクトリと構成ファイルを作成して、さまざまなデータセットまたは検索基準を効率的に処理することが含まれます。
  • solrの動作をsynynyments.txtやstopwords.txtなどの追加の構成ファイルでカスタマイズして、検索エンジンのクエリ言語の理解と処理を微調整し、検索の関連性と精度を向上させます。
  • solr
  • で結果を強調表示します
  • ハイライトコンポーネントを使用すると、検索と一致したドキュメントの部分を強調表示できます。 表示されるものに関する動作はフィールドに依存します。タイトルの可能性がある場合は、一致した単語が存在し、概要や記事の本文などの長いフィールドが表示されます。言葉がスニペットを使用している。 Googleの検索結果と同じように
  • ハイライトを設定するには、最初に含めるフィールドを指定する必要があります。 次に、強調表示された単語またはフレーズに、プレフィックスと対応するPostfixを設定できます。 たとえば、強調表示された単語やフレーズを大胆にするには:
  • 代わりに、背景色を追加するには:

またはフィールドごとの設定を使用することもできます:

検索実装でハイライトコンポーネントを構成したら、検索結果ビューに表示することに関与する作業がもう少しあります。

最初に、IDで強調表示されているコンポーネントから強調表示されたドキュメントを抽出する必要があります。

$hl = $query->getHighlighting();
$hl->setFields(array('title', 'synopsis'));
$hl->setSimplePrefix('<strong>');
$hl->setSimplePostfix('</strong>');
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ここで、強調表示されたドキュメントのプロパティとして、それらを繰り返すことで、強調表示されたすべてのフィールドにアクセスできます。

または、getfield():
$hl = $query->getHighlighting();
$hl->setFields(array('title', 'synopsis'));
$hl->setSimplePrefix('<span style="background:yellow;">');
$hl->setSimplePostfix('</span>');
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
を使用できます
$hl = $query->getHighlighting();
$hl->setFields(array('title', 'synopsis'));
$hl->setSimplePrefix('<strong>');
$hl->setSimplePostfix('</strong>');
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

ハイライトされたフィールドは単にテキストを返すわけではありませんが、代わりに、テキストの「スニペット」の配列を返します。 その特定のフィールドに一致していない場合 - たとえば、検索がタイトルで一致しているが概要ではない場合、その配列は空になります。

上記のコードは、最大1つのスニペットを返します。 この動作を変更するには、setsnippets()メソッドを使用できます:

たとえば、
$hl = $query->getHighlighting();
$hl->setFields(array('title', 'synopsis'));
$hl->setSimplePrefix('<span style="background:yellow;">');
$hl->setSimplePostfix('</span>');
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
「星」という単語を検索するとします。 結果の1つには、次のように読まれる概要があります。

これは見逃せない映画館のイベントは、テレビ史上最も記憶に残る瞬間の1つを特徴とし、世界とスタートレックの両方のベストを作ることについての排他的なクリップ:次世代シーズン3。24世紀に設定します。次世代は、元のスタートレックシリーズの20年にわたってジーンロッデンベリーによって作成されました。次世代は、7シーズンにわたって178のエピソードで構成されるスタートレックフランチャイズの最長ランニングシリーズになりました。スタートレック:次世代 - 両方の世界の最高の世界は、史上最高のテレビエピソードの1つである両方の世界の最高のエピソードを見る最初の機会です。 >

ハイライトされたドキュメントの概要アレイには、3つの項目が含まれます

世界とスタートレックの最高の作品についての歴史と排他的なクリップ:次世代

オリジナルのスタートレックシリーズの後。次世代は星の最長ランニングシリーズ

になりました 7シーズンにわたって178のエピソードで構成されるトレックフランチャイズ。スタートレック:次世代 - 最高の
  • 複数のスニペットを表示する1つの方法は、それらを破裂させることです。
  • これにより、次の結果が得られます
  • 歴史と排他的なクリップは、世界とスタートレックの両方の最高の作品:次世代…元のスタートレックシリーズの後。次世代は、スターの最長ランニングシリーズ…トレックフランチャイズになり、7シーズンにわたって178のエピソードで構成されました。スタートレック:次世代 - 最高の

ここで説明する強調表示コンポーネントの動作を変更するために使用できる他の多くのパラメーターがあります。
$hl = $query->getHighlighting();
$hl->getField('title')->setSimplePrefix('<strong>')->setSimplePostfix('</strong>');
$hl->getField('synopsis')->setSimplePrefix('<span style="background:yellow;">')->setSimplePostfix('</span>');
ログイン後にコピー
ログイン後にコピー
映画検索へのハイライトの統合

ハイライトの使用方法について説明したので、映画検索アプリケーションに統合することは簡単です。
最初に行うことは、検索を実行する直前に、以下を追加することにより、App/Controllers/homeController.phpを変更することです。

それから、覚えている検索結果は、app/views/home/index.blade.phpにあります -
$hl = $query->getHighlighting();
$hl->setFields(array('title', 'synopsis'));
$hl->setSimplePrefix('<strong>');
$hl->setSimplePostfix('</strong>');
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

各検索結果が、検索結果ドキュメントと強調表示されたドキュメントの間のフィールドを本質的に組み合わせて一致させる方法に注目してください。後者は事実上、前者のサブセットです。スキーマに応じて、すべてのフィールドを強調表示されたバージョンで使用できる場合があります。

提案者 - オートコンプリートの追加

提案者コンポーネントは、不完全なクエリ入力に基づいてクエリ項を提案するために使用されます。 基本的に、特定のフィールドのインデックスを調べ、特定のパターンに一致する検索用語を抽出します。 その後、これらの提案を頻度ごとに注文して、検索の関連性を高めることができます。

提案者をセットアップするには、solrconfig.xmlファイルで構成する必要があります。 それを開けて、他の宣言の近くのどこかにXMLの次のスニペットを配置します:

「スペルチェック」への多くの参照に気付くでしょうが、これは単に、提案者コンポーネントがその機能の多くを内部的に再利用するからです。
$hl = $query->getHighlighting();
$hl->setFields(array('title', 'synopsis'));
$hl->setSimplePrefix('<span style="background:yellow;">');
$hl->setSimplePostfix('</span>');
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
重要なビットは項目です。これは、コンポーネントに、提案の基礎となるタイトルフィールドを使用したいことを伝えます。

solrを再起動すると、Webブラウザを介して提案クエリを実行してみてください:

(solrの設定方法によっては、ポート番号を変更する必要がある場合があります)

出力は次のように見えます
$hl = $query->getHighlighting();
$hl->getField('title')->setSimplePrefix('<strong>')->setSimplePostfix('</strong>');
$hl->getField('synopsis')->setSimplePrefix('<span style="background:yellow;">')->setSimplePostfix('</span>');
ログイン後にコピー
ログイン後にコピー
ご覧のとおり、Solrは「ho」 -

*ho ** reas、** ho ** sues、** ho ** rrorおよび** ho ** meの4つの可能な試合を返しました。 *HOME

このコンポーネントを使用して、検索ボックスのオートコンプリートを作成しましょう。これは、ユーザーがクエリを入力するときに一般的な検索用語を示唆します。

最初に、ルートを定義します:
$highlightedDoc = $highlighting->getResult($document->id);
ログイン後にコピー

レイアウトにjquery ui(およびjquery自体)を含める: jQuery UIテーマを含めます: そして最後に、JSをいくつか追加して、オートコンプリートを初期化します:

それはすべてです - いくつかの検索を実行して試してみてください。

配列ベースの構成

if($highlightedDoc){
    foreach($highlightedDoc as $field => $highlight) {
        echo implode(' (...) ', $highlight) . '<br/>';
    }
}
ログイン後にコピー
必要に応じて、配列を使用してクエリをセットアップできます。たとえば、

if($highlightedDoc){
    $highlightedTitle = $highlightedDoc->getField('title');
}
ログイン後にコピー
追加のコアの追加

スタートアップでは、solrは、Core.propetiesというファイルを見つけたときに識別するコアを探して、指定されたホームディレクトリを横断します。 これまでのところ、Collection1というコアを使用しています。3つの重要な項目が含まれていることがわかります。

core.propertesファイル。 最も基本的には、単にインスタンスの名前が含まれています。
$hl = $query->getHighlighting();
$hl->setSnippets(5);
// . . . as before . . .
ログイン後にコピー
confディレクトリには、インスタンスの構成ファイルが含まれています。 少なくとも、このディレクトリにはschema.xmlとsolrconfig.xmlファイルが含まれている必要があります。

データディレクトリにはインデックスが保持されます。 このディレクトリの場所はオーバーライドできます。存在しない場合は作成されます。

したがって、新しいインスタンスを作成するには、次の手順に従います

ホームディレクトリに新しいディレクトリを作成します - 例のアプリケーションの映画
  1. その
  2. にconfディレクトリを作成します
  3. schema.xmlファイルとsolrconfig.xmlファイルをconfディレクトリに作成またはコピーし、それに応じてカスタマイズ
  4. 以下の内容があるホームディレクトリにcore.propertiesというテキストファイルを作成します。
  5. name = instancename
…instancenameは新しいディレクトリの名前です。

例に掲載されるschema.xml構成には、stopwords.txt、protwords.txtなどの多くのテキストファイルへの参照が含まれていることに注意してください。

その後、solr。

を再起動します

Webブラウザの管理Webインターフェイスを介して新しいコアを追加することもできます。左側のコア管理者をクリックして、コアを追加します。

追加の構成

言及する価値のあるいくつかの追加の構成ファイルがあります。

stopwords.txtファイル - より具体的には、lang/stopwords_en.txtなどの言語固有のファイルには、「a」、「the」、「at」などの検索インデクサーが無視する必要がある単語が含まれています。 。 ほとんどの場合、おそらくこのファイルを変更する必要はありません。

アプリケーションによっては、protwords.txtに単語を追加する必要があることがわかります。 このファイルには、「茎になっていない」、つまり基本的なフォームに縮小された保護された単語のリストが含まれています。たとえば、「尋ねられた」は「尋ねる」になり、「作業」は「仕事」になります。 時々、語り出すことは単語を「修正」しようとし、おそらく最後に数字の誤った文字が誤っていると思うものを削除しようとします。 あなたは地理的領域を扱っていて、「メイン」が「メイン」に由来することを発見するかもしれません。

Synoyms.txtを使用して、同義語マッピングを使用して一般的なスペルミスを修正するのに役立つこともあります。

通貨フィールドを使用している場合は、通貨を更新して監視することをお勧めします。

要約

このシリーズでは、検索のためのApacheのSolR実装を調べ、PHP Solariumライブラリを使用して対話しました。 SolRをスキーマの例とともにインストールして構成し、SolRの多くの機能を示す一連の映画を検索するために設計されたアプリケーションを構築しました。ファセットの検索、結果とDismaxコンポーネントの強調表示を検討しました。うまくいけば、これにより、アプリケーションでの検索にsolrを使用するために適応するのに十分な基礎が得られることを願っています。

詳細については、SOLRリファレンスガイドをPDFとしてダウンロードするか、Solariumドキュメントを参照してください。 高度な検索にsolrを使用してソラリウムを使用することについて、よく尋ねられる質問(FAQ)

solrおよびsolariumでオートコンプリートを実装するには、solr構成ファイルに提案者の作成が含まれます。この提案者は、ユーザークエリの提案を提供するために使用されます。提案者がセットアップされたら、Solariumの提案者クエリを使用して提案を得ることができます。提案者クエリは、ユーザーの入力に基づいて提案のリストを返し、ユーザーに表示できます。別のソフトウェア。 Solariumは、強力な検索プラットフォームであるSolRと対話するためのAPIを提供するPHPライブラリです。一方、Stellariumは、コンピューター用の無料のオープンソースプラネタリウムです。肉眼、双眼鏡、または望遠鏡で見られるものと同じように、3Dの現実的な空を示しています。 、まず、SOLRサーバーの構成を使用してクライアントインスタンスを作成する必要があります。次に、クライアントのcreateSelect関数を使用して選択クエリを作成できます。返品するフィールド、クエリ文字列、任意のフィルターなど、クエリにさまざまなパラメーターを設定できます。クエリがセットアップされたら、クライアントの実行機能を使用して実行できます。これにより、個々のドキュメントにアクセスするために繰り返す結果セットが返されます。 ​​ solrインデックスを最適化するには、最初にSolRサーバーの構成を使用してクライアントインスタンスを作成する必要があります。次に、クライアントのCreateUpDate関数を使用して更新クエリを作成できます。このクエリにOptimizeコマンドを追加すると、AddopTimize関数を使用できます。最適化コマンドがクエリに追加されたら、クライアントの実行機能を使用して実行できます。クライアントの実行機能によってスローされたSolarium_Exceptionをキャッチすることで処理できます。この例外には、エラーメッセージやSOLR応答などのエラーに関する情報が含まれます。最初に、クライアントのcreateSelect関数を使用して選択クエリを作成する必要があります。次に、AddFacetSet関数を使用して、クエリにファセットセットを追加できます。フィールドファセット、クエリファセット、レンジファセットなど、さまざまなタイプのファセットをファセットセットに追加できます。ファセットがセットアップされたら、クライアントの実行機能を使用してクエリを実行できます。これにより、ファセットの結果を含む結果セットが返されます。 🎜>ソラリウムとsolRでハイライトを使用するには、最初にクライアントのcreateSelect関数を使用して選択したクエリを作成する必要があります。次に、AddHighlighting関数を使用して、クエリに蛍光ペンを追加できます。ハイライトするフィールドや返されるスニペットの数など、蛍光ペンにさまざまなパラメーターを設定できます。ハイライターがセットアップされたら、クライアントの実行機能を使用してクエリを実行できます。これにより、ハイライト結果を含む結果セットが返されます。 🎜>ソラリウムとsolRでページネーションを使用するには、最初にクライアントのcreateSelect関数を使用して選択クエリを作成する必要があります。次に、クエリに開始パラメーターと行パラメーターを設定して、結果の範囲を指定することができます。開始パラメーターは、最初の結果のインデックスを返すためのインデックスを指定し、行パラメーターは返される結果の数を指定します。ページネーションが設定されたら、クライアントの実行機能を使用してクエリを実行できます。これにより、指定された結果の範囲を含む結果セットが返されます。

以上がSOLRでSolariumを使用して検索 - Advancedの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート