web-dev-qa-db-ja.com

Search APIの並べ替えモジュールでの並べ替えに使用できるフィールドがない

この質問は、私が持っていた別の質問に似ていますが、今は別の文脈にあります。私の以前の質問は: Search API +データベース+検索ビュー+ファセットAPI +ファセットボーナスの検索テキストボックス

現在の検索を使用して検索ボックスをリセットできないことを除いて、そのオプションは機能しました。フィルターはリセットできますが、検索ボックスはリセットできません。ユーザーがフィールドを並べ替えることを許可するオプションも見つかりません。 Search API Sortモジュールをインストールしましたが、使用できるフィールドを取得できませんでした。フィールドを有効/無効にしようとするインデックスを探し続けましたが、それを理解できませんでした。

私の質問は、検索APIとビューで検索フォームボックスを使用して、現在の検索ボックスで検索ボックスをリセットできるようにする方法と、訪問者が並べ替えの基準にするフィールドを選択できるようにする並べ替えボックスを作成する方法を教えてください。

私のビューは、Display Suiteビューモードでノードをレンダリングしています。現在、公開されている検索フィルターと並べ替えフィルターを使用していますが、もちろん、それらは1つのブロックにグループ化されています。私がSearch APIを使用しなければならなかった全体のポイントは、フィルターを提供し、検索と並べ替えフィルターを互いに分離することでした。私の並べ替えオプションはUIの右上に配置され、並べ替えは左側のサイドバーに配置されます。

編集:以下のギガのアドバイスに従って、Search API Sortsを使用して、戻ってフィールドをソート可能にしようとしました。フィールドを削除しましたが、まだそれらを並べ替えることはできません。これはCommerceサイトであり、Commerce Search APIを使用しています。これにより、製品表示インデックスが提供されます。最初はコンテンツのフィールドをインデックスから移動したので、製品の表示と製品のフィールドだけが残ります。

今の私のインデックス付きフィールドは(フィールド、タイプ、ブースト)です:

コンテンツタイプ-文字列-1.0
タイトル-文字列-1.0
作成日-日付-1.0
変更された日付-日付-1.0
製品タグ-分類用語
製品参照-コマース製品
アイテムタイプ-分類用語
ウェイトソート-整数-1.0
製品参照>>価格>>量(小数)(最小)-小数-1.0
製品参照>>価格>>金額(10進数)(最大)-10進数-1.0
タイトル(フルテキスト)[search_api_aggregation_1]-フルテキスト-1.0
製品タグ(フルテキスト)[search_api_aggregation_4]-フルテキスト-1.0
アイテムタイプ名(フルテキスト)[search_api_aggregation_5]-フルテキスト-1.0
製品タグ>>名前-文字列-1.0
Proudct Ref >>サービングサイズ-文字列-1.0
製品参照>>部分サイズ-全文-1.0
アイテムタイプ>>名前-文字列-1.0
製品参照>>価格>>金額(10進数)-10進数-1.0

インデックスを作成しようとしているフィールドは、Title、Min、Max Price、および初期のデフォルトの並べ替えとしてのWeight Sortだけです。 [並べ替え]タブの並べ替え可能なフィールドのテーブルに、それらのどれも表示されません。

4
vintorg

これは、Sortモジュールの最後の更新での既知の問題です。ここに投稿された コードのブロック をコメントアウトすると、問題が解決します。

この問題を修正するには、最新の開発バージョンを使用してください。

https://drupal.org/node/220209

3
vintorg

Search API Sortsは、サポートされているタイプのフィールドのみをリストします。ソートするフィールドが単一値の文字列または数値であることを確認してください。

フィールドが複数値の場合、検索API範囲を使用して、使用できる最大/最小値フィールドを提供できます。

フィールドがフルテキストの場合、1つのトリックは、そのフィールドだけを含む集約フィールドを作成し、それに文字列型を割り当てることです。

12
gigabates

これを解決しました...答え3の助けを借りて

コマースキックスタート、検索API、

ここに集約フィールドを追加:admin/config/search/search_api/index/product_display/workflow

[フィルター]タブで[コールバック設定]を探します[集計フィールド]をクリックしてアクティブなタブに切り替えます

分類の重みフィールドを追加して、「Aggregation Taxonomy Weight」のような名前を付けました。フォーマットとして「フルテキスト」を選択しました。

次に、保存してインデックスを再作成します

次に、admin/config/search/search_api/index/product_display/workflowの「fields」セクションで

新しいフィールドがインデックスに表示されていました...

インデックスとなる新しいフィールドにチェックを入れてください...「文字列」であることを確認してください

保存してインデックスを再作成

見に行く...

新しいCONTEXTUAL FILTERを追加します....新しいフィールド「Aggregation Taxonomy Weight」を探します

ビューでSORT CRITERIAに移動します。..新しいフィールドをソートできます...

LOLを解決するのに3日かかりました。

だから共有する必要がありました...幸運を祈ります!

4
Alex Overton

さて、私のアプローチを説明しようと思います。

Sortsモジュールは使用しませんでした。私が取った手順は次のとおりです。

  1. このフックを使用してカスタムフィールドを作成しました:別のモジュールでhook_entity_property_info_alter()。
  2. ゲッターコールバックで、必要な用語の重みを見つけて、次のようにINTEGERとして返しました。return intval($ weight);
  3. 新しく作成したフィールドにチェックマークを付けてインデックスを付け、フォーマットとして整数を選択しました。インデックスのインデックスを再作成しました。
  4. 最後に、ソート基準の私の見解では、昇順ソートと出来上がりを選択しました!!
0
geodoo

複数値フィールドの場合、このモジュールで提供される非正規化が必要です https://www.drupal.org/project/search_api_grouping

0
giorgio79