Node.js で Airtable 検索時に使う Formula 検索式で文字の完全一致・部分一致をさせるメモ

Node.js で Airtable 検索時に使う Formula 検索式で文字の完全一致・部分一致をさせるメモです。

この記事は 2022年 ゆるくすすめる ( ワンフットシーバス ) | GWアドベントカレンダー の 5/3 5日目の記事でもあります。

今回のデータ

Airtable の公式 Node.js ライブラリ airtable の List records (select) で await async で非同期に取得するメモ – 1ft-seabass.jp.MEMO でも使った、サンプルデータを使います。

image

Formula という検索式

Airtable の公式 Node.js ライブラリ airtable の List records (select) では、Formula という検索式を使って色々とデータを検索できます。

Fomura の作り方は、公式のいかのドキュメントで網羅されています。

Formula field reference – Airtable Support

とはいえ、その中でも文字の完全一致・部分一致は良く使うので、メモしておきます。

完全一致させる

ためしに Name の 岸本 昭次 さんを検索してみましょう。

filterByFormula プロパティを使って {Name}='岸本 昭次' という Formula で検索をかけます。

var Airtable = require('airtable');
var base = new Airtable({apiKey: 'YOUR_API_KEY'}).base('BASE_ID');

async function main (){
  let records;
  // try / catch も加える
  try {
    // select + all で全件取得(今回は maxRecords で 3 件としているので実感ないですが)
    records = await base('Table 1').select({
      // Selecting the first 3 records in Grid view:
      maxRecords: 3,
      view: "Grid view",
      filterByFormula: "{Name}='岸本 昭次'"
    }).all();
  } catch (error){
    console.log(error);
    return;
  };

  // 結果表示
  records.forEach(function(record){
    console.log('Retrieved', record.get('Name'));
  });
}

main();

これを実行すると、

Retrieved 岸本 昭次

と、検索できます。

部分一致させる

今回のデータの中に Name で「田」が含まれる名前を検索してみます。

filterByFormula プロパティを使って SEARCH('田',{Name})!=0 という Formula で検索をかけます。

SEARCH('田',{Name})!=0 は、

  • SEARCH( 含まれているか確認する文字列 , 検索したい文字列 ) によって JavaScript の indexOf のように検索したい文字列で、含まれているか確認する文字列と最初に一致した文字数を返答します
  • そして、一致してない場合は 0 になるので != 0 で比較することによって「一致している」という判定をします
  • また Formula 検索式は 1 ないし true が返ってくると「一致している」と判断するので、上記のような判定になります

といった仕組みです。

ということで、これで検索してみます。

var Airtable = require('airtable');
var base = new Airtable({apiKey: 'YOUR_API_KEY'}).base('BASE_ID');

async function main (){
  let records;
  // try / catch も加える
  try {
    // select + all で全件取得(今回は maxRecords で 3 件としているので実感ないですが)
    records = await base('Table 1').select({
      // Selecting the first 3 records in Grid view:
      maxRecords: 3,
      view: "Grid view",
      filterByFormula: "SEARCH('田',{Name})!=0"
    }).all();
  } catch (error){
    console.log(error);
    return;
  };

  // 結果表示
  records.forEach(function(record){
    console.log('Retrieved', record.get('Name'));
  });
}

main();

これを実行すると、

Retrieved 窪田 裕史
Retrieved 越田 育男

と、検索できます。

Airtable 検索時に使う Formula 検索式は、このように、文字の完全一致だけでなく部分一致もできますし、Formula field reference を見るともっと多彩な検索ができるので便利ですね。

うまく検索ができると JavaScript 側で書くべきコードも減りますし、Airtable からの受け取るデータ量や検索コストも減らせるので、これからもうまく活用していきたいと思います!