【Algolia】検索にヒットする属性を制限する

Algoliaはインデックスを作成した初期の状態だと、全ての属性が検索にヒットします。

例えば、usersというインデックスが存在し下記のレコードが存在するとします。

{ objectID:1, id: 1, nickName: “Tanaka”, address: “埼玉県” },
{ objectID:2, id: 2, nickName: “Yamada”, address: “東京都” },
{ objectID:3, id: 3, nickName: “Nakata”, address: “神奈川県” }

下記はReact(Next.js)でAlgoliaのレコードを検索する例ですが、テキストボックスに「Yamada」と「東京都」のどちらかのキーワードを入力してもobjectID: 2のレコードがヒットします。

import { useForm } from 'react-hook-form';

const User = () => {
  const {
    register,
    getValues,
    formState: { errors },
  } = useForm();

  const algoliasearch = require('algoliasearch');

  const client = algoliasearch('Application ID', 'YourWriteAPIKey');

  const index = client.initIndex('users');

  return (
    <>
      <form>
        <input
          type="text"
          {...register('keyword', {})}
        />
        <input
          type="button"
          value="検索"
          onClick={async () => {
            index.search(getValues('keyword')).then(({ hits }) => {
              console.log(hits);
            });
          }}
        />
      </form>
    </>
  );

}

export default User;

しかし、「addressは個人情報だから検索にヒットさせたくない」という場合があるかもしれません。

そんなときはsearchableAttributes を使用します。

searchableAttributes

searchableAttributesは検索にヒットする属性を制限することができます。

searchableAttributesの設定

searchableAttributesを使うにはAlgoliaのダッシュボードから設定が必要です。

ダッシュボードからSearch をクリック > 「Index」のプルダウンからsearchableAttributesを設定したいインデックスを選択 > Configurationと進みます。

左サイドメニューで「Searchable attributes」が選択されていると思うので、その状態で「Add a Searchable Attribute」をクリックして検索にヒットさせたい属性を入力もしくは選択(今回は「nickName」)し、右下の「Review and Save Settings」をクリックして「Save Settings」をクリックします。

この状態で再度上記コードで「東京都」や「埼玉県」と入力をしてもレコードはヒットしなくなり、「nickName」のみが検索対象となっていることが確認できます!

searchableAttributesについて詳しく知りたい方は下記をご覧ください。

searchableAttributes

IT技術ブログ
↓↓「にほんブログ村」のランキングに参加しています。少しでも面白い、参考になったとか思われたらポチッとしていただけると嬉しいです!

にほんブログ村 IT技術ブログへ

にほんブログ村