AlgoliaのBrowse Index APIについて

Algolia Advent Calendar 2021 の 12月12日の記事です。今回は日頃Algoliaに関してお問い合わせをいただく中で、ネーミング的に少しややこしい(?)、Browse Index APIについて書いていきたいと思います。

Browse Index API と Search and Discovery

AlgoliaはSearch and Discoveryプラットフォームということで、いわゆる検索窓だけでない、例えば👇のようなカテゴリーページの作成をAlgoliaのマーチャンダイジング機能であるVidual Editorを使って行うといったようないわゆるBrowsing(ブラウジング)にもお使いいただくことができます。

ドラッグ・アンド・ドロップで👇のようにカテゴリーページやランディングページをキュレートできるのは便利かな、と。

しかし、このブラウジングという文脈とは全く別で、AlgoliaにはBrowse IndexというAPIが存在します。

Browse Index APIとは?

例えば、Algolia Indexの全てのデータを取り出したい場合はどうしたら良いでしょうか?

1000件程度のレコード数であれば、Algoliaにemptyクエリを送って、Algoliaの検索結果レコード数の上限とページネーション のようにやりくりしても良いかもしれません。しかし、何万とか何十万レコードがAlgolia Indexに存在する場合、それを行うことは難しいでしょう。

そこで、このBrowse Indexの出番です。

Browse Index APIは、Algolia Indexの全レコードを取得する必要がある場合(例: バックアップ、SEO、もしくはそのデータを使ってスクリプトで何かプロセッシングをする)のために存在しています。

つまり、こちらは検索UIに用いられるべきものではなく(誰にでもIndexのデータがダンプされてしまう状態というのも問題です)、バックエンドで行われるべきオペレーションになります。それに加えて、イカのような注意点があります。

  • ランキングは属性の順番(Searchable Attribute)およびCustom Rankingのみで行われます
  • 👇でのランキングは行われません(大量のデータに対してこれらのランキング処理を行うとリソースを大量に消費してしまうため…)
    • distinct
    • typo-tolerance
    • number of matched words
    • proximity
    • geo distance

Browse Index APIの仕様例

例えばAlgoliaのJavaScript ClientでBrowse APIを使って、5000円未満のアイテムを抽出する場合

APIクライアントのインストール

$ npm install algoliasearch

JavaScriptファイルを作って、クライアントオブジェクトのイニシャライズ

const algoliasearch = require('algoliasearch');

const client = algoliasearch('アプリID', 'APIキー');
const index = client.initIndex('インデックス名');

全レコードの中から、5000円未満のレコードをフィルタリングして、name, description, shop_name, priceを返す

let hits = [];

index.browseObjects({
  query: '', // 全レコードにマッチ
  filters: 'price<5000', // 5000円未満のレコード
  attributesToRetrieve: [ // 取得する属性
    "name",
    "description",
    "shop_name",
    "price"
  ],
  batch: batch => {
    hits = hits.concat(batch);
  }
}).then(() => console.log(hits));

実行結果は👇のようになります。

[Running] node "/Users/eijishinohara/20211210test/browse.js"
[
  {
    name: '商品名1',
    shop_name: 'ショップ名1',
    price: 949,
    objectID: '1234567'
  },
  {
    name: '商品名2',
    shop_name: 'ショップ名2',
    price: 4999,
    objectID: '2345678'
  },
〜略〜

まとめ

AlgoliaのBrowse Index APIは、フロントエンドでのブラウジング用のものではなく、バックエンドでバックアップを取ったりAlgolia Indexのデータを使ってプロセッシングを行ったりするような用途にお使いいただける便利機能ですので、よろしければご活用くださいませ。

コメント

タイトルとURLをコピーしました