概要

Next.js for Drupalを試してみました。

https://next-drupal.org/

以下の「Get Started」の通りにすすめることで、Next.jsとDrupalを連携させることができました。

https://next-drupal.org/learn/quick-start

また、以下の記事で、ファセット検索の実装例が紹介されています。

https://next-drupal.org/guides/search-api

本記事では、特に後者のファセット検索の実現に関する備忘録です。

Search API

以下、Serverとindexを作成します。

公式サイトでは以下が参考になります。

https://www.drupal.org/docs/contributed-modules/search-api

日本語サイトでは以下が参考になります。

https://www.acquia.com/jp/blog/introduction-to-search-api-1

Serverの作成

indexの作成

今回、test_index_20230417というインデックスを作成します。

さらに、タイトルをフィールドとして追加しました。

その後、インデクシングを行います。

JSON:API

上記を行ったところで、キャッシュをクリアします。

/admin/config/development/performance

その後、以下のURLからエンドポイントにアクセスできるようになります。

/jsonapi/index/test_index_20230417

以下のようなクエリパラメータによって、検索結果の絞り込みができます。

/jsonapi/index/test_index_20230417?filter[title]=更新したタイトル

{."}".j,d.s""}a{ovmtnee"}a"""}"artl"til,apsai"}:ydi"}t"""""""""""""ii"nsp"nstddlrrstccpsdr"o:ke"[e:ke"rrraeetirhrtee:nslh"slhiuunvvateaoifv"{"fr:""frbppgiitlanmcai{::"e8:"euaacssuetgokus:f"2:ftlloiis"eetyli"{"na{"e__doo":dde"to1{:o3{:siienn:""":_n.d4"nn"__":::l_0"ec":tt:tltfat"h-3heeior""fanr,t-5t{rr"mgu22algats-tnnee"e00lscnpefpaans:,22seos:r1sll"t33e,dl/vb:__,an--,ea/i7/__mu00"tjc-/nvpl"44:ise4xii"l,--oo"9xdd:,11tnn,ex""12r_ab/::"TTuap-j200efi8s45028,f.1o,02::eoan7301crca5-99tg-p,0::e/fi430df1/-50"o5n1++:rdo200m0dT00tade0::rte/800u/as:00e1ce1"",.2r9,,02v:/ci0""c0,e+/0802:a0304"c,35-f1b7-49eb-81ac-f15d0deac22c?resourceVersion=id%3A5075"

Facets

以下にアクセスします。

/admin/config/search/facets

「Add facet」を押して、先に作成したインデックスを選択します。

次の画面において、Widgetの「JSON:API Search API」を選択します。

その後、キャッシュをクリアして、先程のエンドポイントにアクセスしてみます。

/jsonapi/index/test_index_20230417

以下のように、facetsという項目が追加されます。これを使って、フロントエンド側からファセット検索を実現することができます。

{}"}""}"}j,dm,ls""}ae""]i"}ovmttcfnsnee"}aaoa{}ke"artl""ucslhpsai"}::ne""""]"frii"nsttilpt:"e"o:ke"[{"sdaae{}{}:f:nslh.:""btr,{""{"fr.::ehm""}""}{:{::"e.2l"suvuv:f],["":"ra""""ra""""""{",t::llvlacllvlach1{:i""uaaco"uaacot.t"t[:elbtu:elbtut0"lTisueinsueinp"heit""elvt""elvts,t_tlh:""e"h:""e":t2let::":t::":/p0e_t{:t{:/:2"2p""1p""1x/3,0sfsfx/02:a:axj43/l/l/s10/s/sjo74xexesn"1x,x,oa,7xxnp"//ai,jj""p.ss,,iooo/rnniga""an/p,,pdfiieo//xrii/mnntaddetees/xxt1//_.tti0een/ssd"tte__xii_nn2dd0ee2xx3__022400122733"00441177??ffiilltteerr%%55BBttiittllee__2200223300441177%%55DD==%%EE56%%B99B%%BB34%%EE86%%B936%%8B00%%EE83%%A8D1%%B927%%EE33%%8831%%897F%%EE33%%8822%%BB8F%%EE33%%8822%%BAF4%%EE33%%8833%%A8B8%%EE33%%8823%%AA2B%"E,3%83%BC%E3%82%AB%E3%82%A4%E3%83%96",

まとめ

Next.jsとの連携例は、以下のリポジトリでソースコードが公開されています。

https://github.com/chapter-three/next-drupal/blob/main/examples/example-search-api/pages/advanced.tsx

自分で設定したインデックスやフィールドに書き換えることで、以下のデモページのような検索ページを作成することができました。

https://example-search-api.next-drupal.org/advanced

JSON:APIモジュールを用いたファセット検索などで参考になりましたら幸いです。