kintone の検索のしくみと注意事項

目次

はじめに

kintoneは大企業や自治体の情報システム基盤として採用されることが増えています。
情報システム基盤として、多くのデータを保有し日々そのデータを活用していると思いますが、検索においては知っておいてほしい注意事項があります。
本記事では、その注意事項と対応案について案内します。

想定読者

  • kintoneの開発パートナーやkintoneのエンジニア
  • kintoneと外部システムとの間でデータ連携をする人
  • kintoneへのデータの登録や更新を頻繁に行う人

kintone の検索機能について

kintoneでは、レコードやスペースなどに登録された、文字列やファイルに含まれる文字列も検索できる検索エンジンを利用しています。
検索エンジンはこれらのデータを検索する際に、インデックスを利用します。
kintoneにおいては、以下に記載するデータ操作が行われた際、インデックス作成対象のデータをキューに追加し、追加されたデータの順番どおりにインデックスを作成します。

  • インデックスの作成が行われるデータ操作の例
    • データの登録
      アプリのレコード追加や、レコードやスペースへのコメントの投稿など。
    • データの更新
      アプリのレコード編集など。
    • データの削除
      アプリのレコード削除や、レコードやスペースのコメント削除など。

インデックスを利用した検索の対象となるデータは 検索対象 (External link) を確認してください。

インデックスを利用した検索シーン

kintoneでは、以下のような操作の場合に、インデックスを利用して検索します。

検索における注意事項

インデックスの作成が完了する前に、該当データの検索をした場合は以下のような現象が生じます。

  • 登録したはずのデータが検索にヒットしない。
  • 「次のキーワードを含む/含まない」を利用したレコードの絞り込みで該当のレコードが取得できない。
  • 「次のキーワードを含む/含まない」を利用した集計結果が、意図したとおりにならない。

上記現象は、キューへ追加されたデータのインデックスが作成される前に、インデックスを利用した検索をしたことが要因で発生しています。
インデックスの作成処理はバックグラウンドで行われているため、検索でヒットしていなかったデータは、時間経過とともに検索結果へ表れます。
ただし、キューへ追加されたデータは順番に処理されます。もし大量のデータがキューへ追加された場合は、すべてのデータを処理するために時間を要する可能性があります。
キューに追加されるデータの量は、上述でご案内した「インデックスの作成が行われるデータ操作の例」にて操作されるデータの量に依存します。

キューに大量のデータを追加しやすい操作/処理

次のような操作/処理が該当します。

  • 大量データの一括追加・更新

    • APIによるレコード処理
      APIを利用すると複数のレコードの登録・更新・削除を一括で行うことが可能です。外部システムから取得したデータをバッチ処理でkintoneへ連携するような場面では、大量のデータを一度でkintoneに登録することが考えられます。
      たとえば以下のAPIを利用した処理が該当します。
      ▼複数レコードの一括操作
      複数のレコードを登録する
      複数のレコードを更新する
      複数のレコードを削除する

    • CSVファイルの読み込み
      CSVファイルを利用したレコード登録や更新も一度に最大10万レコードまで登録可能です。
      そのため、読み込ませるCSVファイルのサイズや、CSVファイルの読み込み頻度によっては登録したデータのインデックスの作成に時間を要する可能性があります。

  • 大きなサイズや大量のファイルの追加・更新
    添付ファイルに含まれる文字列データも、検索に利用するインデックス作成の対象となっています。
    そのため、サイズの大きいファイルを添付したり複数のファイルを一度に添付すると、インデックスの作成に時間を要する可能性があります。

  • アプリの所属スペースの変更
    アプリの所属スペースを変更すると、そのアプリ内のデータが再びインデックス作成の対象となります。
    そのため、所属スペースを変更しようとするアプリに含まれるデータ量が多い場合などは、インデックス再作成に時間を要する可能性があります。

登録されたデータが検索に表れない場合の対応方法

登録したデータがしばらく経っても検索結果へ表示されないときは、キューに大量のデータを追加している可能性が考えられます。
キューへ追加されたデータは、順番に処理されていくため、kintoneユーザーは登録したデータが検索結果へ表れるようになるのを待つしかありません。

ただし、アプリのレコードの絞り込みに関しては、「次のキーワードを含む/含まない」を条件に利用せず絞り込む方法があります。この方法を利用した場合は、データベースに直接問い合わせをするので、インデックスの作成状況の影響を受けません。
「次のキーワードを含む/含まない」を絞り込み条件に利用しない方法としては、以下のようなものがあります。

  • 文字列データ型のフィールドの絞り込みで「等しい/等しくない」、「次のいずれかと等しい」を利用する。
  • 数値フィールド等、文字列データ型のフィールド以外を対象に絞り込みを行う。

インデックスの作成状況による影響を小さくするための考え方

インデックスの作成状況による業務への影響をできる限り小さくするために、kintoneでのデータ操作量を減らしたり、ユーザーへ影響の出ない時間帯にデータの操作をする対応を普段から行うことが有効です。
上述の考えを意識した対応方法を以下に記載します。

データ操作量を減らす方法

  • 必要なデータだけをkintoneに登録する。
    別システムからkintoneへデータ移行をするようなとき、不要なデータを含まないようにすることでkintoneへ登録するデータ量を削減できます。
    システム移行時のデータ移行の考え方は、kintone SIGNPOSTの記事を確認してください。
    データの断捨離 (External link)

  • 大量のデータを登録/更新する際は、実行間隔を空ける。
    大量データをCSVファイルの読み込みやAPIを利用して登録・更新するようなとき、登録するデータを分割して、十分な時間を空けて処理を行うことで、一度に操作するkintoneへのデータ量を減らすことが可能です。

  • 1アプリのデータ量を少なくする。
    普段から1アプリ当たりのデータ量を少なくしておくことで、アプリの所属スペースを変更した際にインデックス再作成の対象となるデータを少なくできます。
    アプリのデータ量に対する対応策は、kintone SIGNPOSTの記事を確認してください。
    性能上の考慮点と改善策 (External link)

業務への影響をできる限り小さくする方法

  • 定期的なデータ操作をする際は、業務時間外などユーザーアクセスの少ない時間に行う。
    データ操作の作業を業務時間外に行うことでkintoneユーザーへの影響を減らすことができます。
    たとえば、サイボウズが提供しているコマンドラインツールとタスクスケジューラーを組み合わせる方法などが考えられます。
    kintone コマンドラインツール(cli-kintone)

  • 先に検索したいデータから登録する。
    検索に利用するインデックスは、キューへ追加されたデータが順番に処理されて作成されます。
    そのため、一度に多くのデータを操作する場合、検索の対象としたいデータを優先的に登録する方法があります。

おわりに

本記事では、kintoneにおける検索時の注意事項を案内しました。
さまざまな使い方ができるkintoneではその利用法にあった運用をすることが大切です。
文字列データ型を対象とした検索をよく利用し、日々のデータ操作量が多い場合は本記事で案内した以下の観点にご注意ください。

  • 検索に利用するインデックスの作成時間は、kintoneでのデータ操作量に依存する。
  • インデックスの作成状況による業務への影響を小さくするには、kintoneでのデータ操作量を小さくする。
  • バッチ処理などを組み合わせて、ユーザーへの影響が出ない時間帯にデータ操作をする。
information

このTipsは、2023年8月版kintoneで動作を確認しています。