参照エンティティとの関係を持つ検索APIビューを作成できるようにしたいプロジェクトに取り組んでいます。
ユースケース:
次のコンテンツタイプがあります:製品ページ製品に関する商業情報を保持します
次に、すべての詳細(記事番号、シリアル番号など)を保持するコンテンツタイプProductがあります。
コンテンツタイプProducts Pageで検索APIビューを作成しました。これは、カタログ内のすべての商業情報を表示し、いくつかのファセットで公開された全文検索ボックスを終了します。
各製品ノードには、それが属する製品ページノードへのエンティティ参照があります。
もちろん、フルテキスト検索で記事番号を検索できるようにしたいと思います。結果は、検索された記事番号を保持する製品ノードによって参照されている製品ページノードを表示する必要があります。
しかし、通常のビューを使用するときに通常使用するリレーションを作成する方法がわかりませんか?
さらに、以下の例:
製品ページノード:椅子(本体と画像付き)製品ノード:-木製の椅子(art nr 123、およびエンティティは椅子を参照)-金属製の椅子(art nr 456、およびエンティティは椅子を参照)
したがって、ppl search art nr 123の場合、ビューに「製品」ページのノード「椅子」を表示したいと思います。
前もって感謝します!
より一般的なソリューションとして https://www.drupal.org/project/entityreference_backreference を試すこともできます。
Hook_entity_property_info_alter()を実装する
function MY_MODULE_entity_property_info_alter(&$info) {
$info['node']['properties']['article_number'] = array(
'type' => 'text',
'label' => t('Article number'),
'getter callback' => 'MY_MODULE_get_article_number',
);
}
function MY_MODULE_get_article_number($node) {
if ($node->type == 'product_page') {
// Return the article number from the referenced product node
}
}
Admin/config/search/search_api/index/{index_name}/fieldsに移動して、プロパティを選択します。これで、このプロパティを他のフィールドと同じように使用できます。
あなたの場合、あなたはあなたのビューでこのフィールドを設定する必要があります。フィルター基準に「検索:全文検索」を追加したと思います。このフィルターをクリックして、プロパティを[検索フィールド]設定に追加します。
これがうまくいくことを願っています。
この構成を作成したところ、うまくいきました。
インデックスを作成します。製品インデックスとしましょう。
[フィールド]タブで、メインコンテンツからインデックスを作成するフィールドを選択します。この場合、フルテキストモードではart nrになります。
次に、フィルタータブに移動し、[バンドルフィルター]を選択して、[選択したバンドルからのもののみ]をオンにして、[製品]を選択します。
次に、すべてのインデックスをクリアして、もう一度インデックスを作成します。
これで、インデックスのビューを作成し、リレーションを作成して、リレーションの確認を表示するファイルを追加できます。
次に、全文検索を公開し、番号を検索します。
通常のビューのコンテンツにできるように、レンダリングされたエンティティに関係を適用することはできませんが、フィールドを処理して結果データを表示できると思います。
hook_entity_property_info_alter ()を使用して、エンティティにプロパティを追加できます。定義されたゲッターコールバックを介して記事IDを返します。検索APIインデックスのフィールド設定でプロパティを選択します。
ビューで、このプロパティを「全文検索」フィルターの「検索フィールド」設定に追加できます。
詳細が必要な場合はお知らせください。