Firestore nGram Search provides full-text search using nGram.
Only Firebase 8 is supported.
- Any language support
- Firestore query support
- Works on client (limited)
- Firebase 9 support
npm install firestore-ngram-search
import * as admin from 'firebase-admin';
import FirestoreNGramSearch from 'firestore-ngram-search';
admin.initializeApp();
const db = admin.firestore();
// Specify the collection to store index.
const fooSearch = new FirestoreNGramSearch(db.collection('fooIndex'),
// Set nGram number. Default is 2.
{n: 2});
import firebase from 'firebase';
firebase.initializeApp(firebaseConfig);
const db = firebase.firestore();
// Specify the collection to store index.
const fooSearch = new FirestoreNGramSearch(db.collection('fooIndex'))
Works with only Admin SDK.
const fooData: Foo = {
title: 'Example document',
description: 'Any language is supported. どの言語も対応しています。支持任何语言。',
contents: 'FIREBASE 9 IS FULL OF BUGS.',
likes: 10,
createdAt: firestore.FieldValue.serverTimestamp()
}
const docRef = db.collection('foo').doc('fooID');
// Support WriteBatch.
const batch = db.batch();
batch.set(docRef, fooData);
await fooSearch.set(docRef, {
// Support batch.
batch, data: fooData,
// Specify the fields to store in index.
fields: ['title', 'description']
});
await batch.commit();
Works wih only Admin SDK.
const docRef = db.collection('foo').doc('fooID');
const batch = db.batch();
batch.delete(docRef);
await fooSearch.delete(docRef);
await batch.commit();
const query = 'Example'
const result = await contentsSearch.query()
.search(query, {
// Specify the fields to search.
fields: ['title'],
// Wheather search by each chars. Set false to search faster.
searchByChar: true,
})
// Supports firestore query functions.
.where('likes', '==', 10)
.limit(10)
.get();
result.hits.forEach(hit => {
// This will be DocumentReference of 'fooID' in foo collection.
console.log(hit.ref);
// This will be DocumentData of 'fooID' in foo collection.
console.log(hit.data);
})
*DON'T use field name that starts with '__' in firestore document.