24
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FirestoreでLike風検索(前方一致)を試す

Last updated at Posted at 2019-12-24

Firestoreのクエリは相変わらずですが、工夫すればなんちゃって前方検索ができるというのは記事でみて知っていましたが、自分で試したことがなかったのでやってみたメモ。

いちおう日本語とかで正しく処理できるかとか試して見たかった。

挿入部は必要に応じてコメントイン・アウトお願いします。

index.js
const admin = require('firebase-admin');

admin.initializeApp({
    credential: admin.credential.cert('/path/to/key.json'),
    databaseURL: 'https://xxxxxxxxxx.firebaseio.com',
});

const db = admin.firestore();

(async () => {

    // db.collection("dictionaries").add({
    //     jpName: '山田 太郎',
    //     enName: 'Taro Yamada',
    // })

    // db.collection("dictionaries").add({
    //     jpName: '山田 花子',
    //     enName: 'Hanako Yamada',
    // })

    // db.collection("dictionaries").add({
    //     jpName: '山田次郎',
    //     enName: 'Jiro Yamada',
    // })

    // db.collection("dictionaries").add({
    //     jpName: '鈴木 花子',
    //     enName: 'Hanako Suzuki',
    // })

    // db.collection("dictionaries").add({
    //     jpName: '佐藤 一郎',
    //     enName: 'Ichiro Sato',
    // })
	
	
	//クエリ
    const keyword = "山田";
    const snapshots = await db.collection("dictionaries").orderBy("jpName").startAt(keyword).endAt(keyword + '\uf8ff').get();
    const docs = snapshots.docs.map(doc => doc.data());
    console.log(docs);

})()

実行。

node index.js


[
  { jpName: '山田 太郎', enName: 'Taro Yamada' },
  { jpName: '山田 花子', enName: 'Hanako Yamada' },
  { jpName: '山田次郎', enName: 'Jiro Yamada' }
]

当然ですが、日本語、英語で問題なく動きます。

あと、keyword="山田次郎"といった完全一致(風)でももちろんヒットします。

名前を検索するのであれば、姓、名でフィールドを分けて、検索用にnameArrayとか配列フィールドを作って['山田','花子']などとして、.where("nameArray","array-contains-any",["山田","花子"])とかした方が現実的かも。

標準機能にLike検索(部分一致)欲しいなあ。。。

24
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?