kintoneプラグイン『機能拡張スタンダード All-In』を使ってレコード検索を行う

kintoneプラグイン[『機能拡張スタンダード All-In』](https://spica.tokyo/bluelaunch)の<strong>レコード一覧管理 - キーワード検索</strong>を使用します。

![ss_plugin_config5.png](https://qiita-image-store.s3.amazonaws.com/0/67365/0edee9e8-9e31-e95b-54f9-d15b04c5eaf3.png)

#概要

レコード一覧画面に検索ボックスを設置して、キーワード入力によるレコード検索を行います。

通常のレコード絞り込みと違い、

・検索対象のフィールドをいちいち選ばなくて良い
・数値や日付、文字列中の単語などの部分一致で検索できる
・アカウント／組織／グループ／ラジオボタン／チェックボックスなどをフリーワード入力で検索できる

など直感的な検索が可能となります。

[郵便番号のCSVデータ](http://www.post.japanpost.jp/zipcode/dl/kogaki-zip.html)（2018年1月31日時点のファイル）を読み込んで日本国内の住所一覧データをもつアプリを作りました。

![bl_1.9_0100.png](https://qiita-image-store.s3.amazonaws.com/0/67365/96f00de1-4c98-f007-0bf9-895ede46f6c1.png)

このアプリで実際に検索を行っていきます。
（※検索を行うために設定が必要ですが、これは後で説明します）

#検索キーワードの複数指定

##AND検索
半角スペースで区切った文字列を、絞り込み条件で検索します。

```:例1　AND検索
東京都 千代田区
```
「東京都」と「千代田区」の両方にヒットするレコードが検索されます。485件でした。
![bl_1.9_0102.png](https://qiita-image-store.s3.amazonaws.com/0/67365/1c8a7a3b-ec0d-9902-8121-1477aeda9ef1.png)

##OR検索
バーティカルバー（パイプ記号）で区切ると、OR条件で検索します。

```:例2　OR検索
東京都 | 大阪府
```
「東京都 | 大阪府」と検索すると、「東京都」「大阪府」のどちらかにヒットするレコードが検索されます。結果は7696件でした。
![bl_1.9_0103.png](https://qiita-image-store.s3.amazonaws.com/0/67365/9cc24bfe-563d-ebd0-c3ea-b21ef7bda990.png)

---

OR条件はAND条件よりも優先されます。検索条件のブロックを区切る記号と考えてください。
キーワードを3つ以上組み合わせる場合に影響します。

```:例3　OR条件とAND条件の組み合わせ
東京都 区 | 京都府 区
```
「東京都」「区」の両方にヒットするレコードと「京都府」「区」の両方にヒットするレコードが検索されます。
結果は8009件でした。
![bl_1.9_0106.png](https://qiita-image-store.s3.amazonaws.com/0/67365/937c4f0c-4ac0-eb01-3d52-c7f4a8eaaa8e.png)

##NOT検索
キーワードの先頭にマイナス符合をつけると、除外条件で検索します。

```:例4　NOT検索
東京都 -千代田区
```
AND検索と除外条件の組み合わせです。
「東京都」にヒットし、「千代田区」にヒットしないレコードが検索されます。結果は3366件でした。
![bl_1.9_0105.png](https://qiita-image-store.s3.amazonaws.com/0/67365/d835ef79-8c59-daa6-ccba-dbaa503e1e00.png)

##エスケープ文字

半角スペースやマイナス符合で始まる文字列などを検索したい場合は、キーワードをダブルクォーテーションで囲います。
ダブルクォテーションを検索したい場合は、" の前に \ を付けます。

```:例5　エスケープ文字
"東京都 千代田区"
"-0001"
"\""
```

#プラグイン設定

プラグイン設定を開き、レコード一覧管理のタブにキーワード選択の設定を行います。

1. <strong>値検索を利用する</strong> または <strong>拡張検索を利用する</strong> のどちらかをチェックし検索モードを選択。

2. 検索対象とするフィールドのボタンを押して選択。

3. 拡張検索を選択した場合は、<strong>検索用データ保存フィールド</strong>を選び、<strong>検索用データを更新する</strong>を押して更新を実行。

---
<strong>設定を行ったところ</strong>
![bl_1.9_0001.png](https://qiita-image-store.s3.amazonaws.com/0/67365/0c9c941b-e61c-bd35-b544-3a47dba94d77.png)

<strong>検索用データを更新するボタンを押すとダイアログボックスが開く</strong>
![bl_1.9_0002.png](https://qiita-image-store.s3.amazonaws.com/0/67365/7e604dc6-82b5-1541-c6eb-caa6d04407ee.png)

<strong>検索用データの更新中</strong>
（これは全国の住所データなので124,178件のレコードの更新となった）
![bl_1.9_0003.png](https://qiita-image-store.s3.amazonaws.com/0/67365/958bf4bb-e462-8a3b-09fb-2d176aabc80c.png)

<strong>検索用データの更新が正常に完了したところ</strong>
（エラーが発生した場合はダイアログボックス内にエラーが表示される）
![bl_1.9_0004.png](https://qiita-image-store.s3.amazonaws.com/0/67365/f9db64b9-09e5-5a85-f03a-d06ba250657e.png)

#値検索について
検索データ用のフィールドをアプリに用意する、などの準備なしで検索機能が使えます。
以下のフィールドが検索対象に選択できます。

+ 文字列（１行）
+ 文字列（複数行）
+ 数値
+ 計算

検索できるキーワードについてはkintoneの仕様に準じます。
[> 検索キーワード入力時の注意事項](https://jp.cybozu.help/ja/k/user/search_details#anchor_caution_keywords)

#拡張検索について

使用するためには検索データ用のフィールドをアプリに用意する、などの準備が必要です。
検索用データのフィールドに指定したフィールドは自動的に非表示となります。

+ すべてのフィールドを検索対象として選択することができます。
+ ステータス（プロセス管理）が検索対象として選択できます。
+ 2文字以上の単語を1文字で検索できます。<br>（「日本語」という文字列を「日」や「本」で検索できる）
+ 英数字は単語単位でなく部分的な一致で検索できます。<br>（「cybozu_kintone」という文字列は「cybozu」「kintone」で検索できる）
+ カナの全角と半角、アルファベットの大文字と小文字が区別されます
+ ユーザーアカウント、組織、グループ、ドロップダウン、チェックボックス、ラジオボタン、複数選択が部分一致で検索できます。

<font color="#7070ff">アカウント名やドロップダウンの選択肢など、レコード以外のデータが変更された場合でも検索用データの更新は必要ありません。
ただしアプリの更新でこれらのフィールドコードが変更された場合は検索用データの更新が必要です。</font>

#検索結果について

検出されたレコードは一覧ビューとして表示されます。
AND検索とOR検索を<strong>併用しない</strong>検索結果に対しては、さらにkintone機能を利用した絞り込みやグラフ化などが行えます。

---

#このプラグインについて
・[自動計算・自動採番](http://qiita.com/spica/items/803af7cd540ae0b8f718)
・[条件書式](http://qiita.com/spica/items/24027003e9dfb9363819)
・[フィールド属性](http://qiita.com/spica/items/73107bda2cff4a94cf41)
・[選択数制御](http://qiita.com/spica/items/1c3ba3927b844b6bb72b)
・[レコード一括更新](http://qiita.com/spica/items/f0e84a1cf430670c4292)
・[自動計算によるレコード一括更新](kintoneプラグイン『機能拡張スタンダード All-In』を使って自動計算でのレコード一括更新を行う)