Firebase Extension to automatically push Firestore documents to Typesense for full-text search with typo tolerance, faceting, and more

Overview

Firestore / Firebase Typesense Search Extension 🔍

CircleCI

A Firebase extension to sync data from your Firestore collection to Typesense, to be able to do full-text fuzzy search on your Firestore data, with typo tolerance, faceting, filtering, sorting, curation, synonyms, geosearch and more.

This extension listens to your specified Firestore collection and syncs Firestore documents to Typesense on creation, updates and deletes. It also provides a function to help you backfill data.

What is Typesense?

If you're new to Typesense, it is an open source search engine that is simple to use, run and scale, with clean APIs and documentation. Think of it as an open source alternative to Algolia and an easier-to-use, batteries-included alternative to ElasticSearch. Get a quick overview from this guide.

⚙️ Usage

1. Setup Prerequisites

Before installing this extension, make sure that you have:

  1. Set up a Cloud Firestore database in your Firebase project.
  2. Setup a Typesense cluster (on Typesense Cloud or Self-Hosted).
  3. Setup a Typesense Collection either through the Typesense Cloud dashboard or through the API.

2. Install the Extension

You can install this extension either through the Firebase Web console or through the Firebase CLI.

Firebase Console

Install this extension in your Firebase project

Firebase CLI
firebase ext:install typesense/firestore-typesense-search --project=[your-project-id]

Learn more about installing extensions in the Firebase Extensions documentation:

3. Backfilling data (optional)

This extension only syncs data that was created or changed in Firestore, after it was installed. In order to backfill data that already exists in your Firestore collection to your Typesense Collection:

  • Create a new Firestore collection called typesense_sync through the Firestore UI.
  • Create a new document with the ID backfill and contents of {trigger: true}

This will trigger the backfill background Cloud function, which will read data from your Firestore collection and create equivalent documents in your Typesense collection.

🧾 Billing

To install an extension, your project must be on the Blaze (pay as you go) plan.

  • You will be charged a small amount (typically around $0.01/month) for the Firebase resources required by this extension (even if it is not used).
  • This extension uses other Firebase and Google Cloud Platform services, which have associated charges if you exceed the service’s free tier:
    • Cloud Firestore
    • Cloud Functions (Node.js 14+ runtime. See FAQs)
  • Usage of this extension also requires you to have a running Typesense cluster either on Typesense Cloud or some self-hosted server. You are responsible for any associated costs with these services.

🎛️ Configuration Parameters

When you install this extension, you'll be able to configure the following parameters:

Parameter Description
Firestore Collection Path The Firestore collection that needs to be indexed into Typesense.
Firestore Collection Fields A comma separated list of fields that need to be indexed from each Firestore document. Leave blank to index all fields.
Typesense Hosts A comma-separated list of Typesense Hosts. For single node clusters, a single hostname is sufficient. For multi-node Highly Available or SDN Clusters, please be sure to mention all hostnames.
Typesense API Key An Typesense API key with admin permissions. Click on "Generate API Key" in cluster dashboard in Typesense Cloud.
Typesense Collection Name Typesense collection name to index data into.
Cloud Functions location Where do you want to deploy the functions created for this extension? You usually want a location close to your database. For help selecting a location, refer to the location selection guide.

☁️ Cloud Functions

  • indexToTypesenseOnFirestoreWrite: A function that indexes data into Typesense when it's triggered by Firestore changes.

  • backfillToTypesenseFromFirestore: A function that backfills data from a Firestore collection into Typesense, triggered when a Firestore document with the path typesense_sync/trigger has the contents of backfill: true.

🔑 Access Required

This extension will operate with the following project IAM roles:

  • datastore.user (Reason: Required to backfill data from your Firestore collection into Typesense)

Development Workflow

Run Emulator

npm run emulator
npm run typesenseServer

Add records in the Firestore UI and they should be created in Typesense.

Run Integration Tests

npm run test

Generate README

The Firebase CLI provides the following convenience command to auto-generate a README file containing content pulled from extension.yaml file and PREINSTALL.md file:

firebase ext:info ./ --markdown > README.md

Publish Extension

  • Update version number in extension.yaml
  • firebase ext:dev:publish typesense/firestore-typesense-search
  • Create release in Github

ℹ️ Support

Please open a Github issue or join our Slack community.

Comments
  • Firebase integration with self-hosted server

    Firebase integration with self-hosted server

    Description

    I installed typesense in my

    ubuntu 20.04 apache server

    and it is successfully running but I can't succeed in trying to sync my firestore data using the firebase extension. When I input the public IP of my server in the typesense host portion, it fails to upsert the data.

    Steps to reproduce

    firebase extension image

    image

    and this is my config file for typesense server

    image

    I'm guessing that it needs SSL certification but where do I get my SSL certificates to put in the configs? Can self-signed work? Can certbot work?

    I'm new to this so have mercy on me

    ""

    Expected Behavior

    Actual Behavior

    Metadata

    Typsense Version:

    OS:

    opened by echo-slam-jam 49
  • how can i trigger backfill manually

    how can i trigger backfill manually

    Description

    Reading the docs i saw i have to create a new collection called typesense_sync with inside a document named backfill => trigger : true. But actually none of my documents are filled in the collection, in the logs i see few detail but i don't undestand

    Steps to reproduce

    Expected Behavior

    Ther is a way to trigger backfill manually?

    Actual Behavior

    Metadata

    Typsense Version:

    OS: Schermata 2022-02-16 alle 17 36 23

    opened by iamandreadompe 10
  • Firebase cloud function error

    Firebase cloud function error

    Description

    When creating or upserting a document, or a backfill operation the cloud functions fails with the code error "EAI_AGAIN getaddrinfo EAI_AGAIN https". The same issue occurs with both cloud functions (ext-firestore-typesense-search-backfillToTypesenseFromFirestore, ext-firestore-typesense-search-indexToTypesenseOnFirestoreWrite). The following are the logs from the cloud function:

    • Function execution started
    • Creating document {"id":"UMA-NICO-3"}
    • Request #1629896880473: Request to Node 0 failed due to "EAI_AGAIN getaddrinfo EAI_AGAIN https"
    • Request #1629896880473: Sleeping for 120s and then retrying request...
    • Function execution took 120003 ms, finished with status: 'timeout' I tried running typesense on a virtual machine and typesense cloud, both cases with the same errors. I also tried creating a collection and a document from a JS client to the typesense cloud and worked fine. Firebase plan is BLAZE.

    Steps to reproduce

    Project created in Firebase, typesense cloud created, cloud function triggered by a new document (or update).

    Expected Behavior

    Documents created and updated on typesense cloud.

    Actual Behavior

    No documents or collections are synced from Fireabase to typesense cloud.

    Metadata

    Typsense Version: v0.21.0

    OS: Linux Ubuntu (used on the VM)

    opened by Nicoglx 7
  • Index a flattened field within an object

    Index a flattened field within an object

    Description

    Hi, I am trying index some fields which are within an object that I am supposed to flatten in order to index in Typesense. But looking at this, https://github.com/typesense/firestore-typesense-search/blob/master/functions/src/utils.js#L16-L20 , I think even a flattened field would not match. Is there a workaround for fields within an object using firestore & typesense? Thanks in advance.

    Steps to reproduce

    Place a flattened field into Firestore Collection Fields.

    Expected Behavior

    Index a flattened field within an object into typesense.

    Actual Behavior

    Unable to index a flattened field within an object into typesense.

    Metadata

    Typsense Version: typesense/[email protected]

    opened by JyYong93 6
  • Firestore functions doesn't push data to typesense schema

    Firestore functions doesn't push data to typesense schema

    Hi all! i've create a typesense schema like this: const myCollection = { 'name': 'products', 'fields': [ {"name": ".*", "type": "auto" } ] } then, i've installed firestore extension and link "products" schema to a firestore DB collection. But the functions doesn't work.

    When I tried backfill, function throw this error:

    image

    When I tried to add a document the function doesn't throw an error but in the typesense schema doesn't appear. On delete the same document, the function throw this error:

    image

    It seems that firestore extension cannot comunicate with typesense schema. Can you help me?

    opened by OCALAB 5
  • Crash during backfilling collection data

    Crash during backfilling collection data

    Description

    Hi! I want to implement full text search into my project which is based on Firebase. Right now I'm trying to get some things rolling by backfilling my data to the TypeSense Collection. I'm using a Firebase TypeSense Extension from this repo. Everything went smoothly except the backfilling process. The ext-firestore-typesense-search-backfillToTypesenseFromFirestore cloud function gives me an error "Memory limit exceeded". Usually I fix that problem by deploying a function once again with higher available resources but I'm not sure if this is the proper solution. The test collection has a size of around 60MB and contains 53K documents. I was able to successfully export other collection which is a bit smaller (around 30k documents).

    Steps to reproduce

    Screenshot 2021-08-03 at 15 46 52

    Expected Behavior

    The ext-firestore-typesense-search-backfillToTypesenseFromFirestore trigger function shouldn't crash.

    Actual Behavior

    If the collection is big enough the ext-firestore-typesense-search-backfillToTypesenseFromFirestore trigger function returns an error Function invocation was interrupted. Error: memory limit exceeded.

    Metadata

    Typsense Version: 0.21.0

    opened by owocowyy 5
  • Maping Firestore data types to Typesense data types

    Maping Firestore data types to Typesense data types

    Change Summary

    Currently, if there is a GeoPoint value in your document you will receive this error log printed:

    Screen Shot 2022-04-14 at 12 02 52

    • convert geo-point objects to a 2 element array
    • convert timestamp dates to Unix timestamps

    PR Checklist

    opened by yamankatby 4
  • Add support for multiple collections to be indexed in typesense

    Add support for multiple collections to be indexed in typesense

    Description

    This is not a bug with the extension, but a request to add a feature that would allow support for multiple collections to be indexed into typesense. The configuration steps could allow an array or list of collections to be inputted, and a subarray for fields.

    opened by georgekamar 4
  • Host issues with DNS ip https - EAI_AGAIN and ECONNREFUSED

    Host issues with DNS ip https - EAI_AGAIN and ECONNREFUSED

    Hi, I've been trying to setup this for a while now and I never get any errors but nothing happens when I update or add docs to the collection it was supposed to be indexing. How to troubleshoot the change in the document? What commands should I use?

    The only log I can see is when running tail -f /var/log/typesense/typesense.log

    I20220618 02:35:29.949776 28495 raft_server.h:60] Peer refresh succeeded!
    I20220618 02:35:39.951146 28490 raft_server.cpp:531] Term: 5, last_index index: 18, committed_index: 18, known_applied_index: 18, applying_index: 0, queued_writes: 0, pending_queue_size: 0, local_sequence: 44
    

    Cloud logs return 0 logs.

    My setup:

    • I have a fresh Ubuntu AWS Lightsail running typesense
    • port 8108 is open
    • https is on
    • health check returns ok.
    • Collection was created on the server
    • typesense_sync collection created

    Questions:

    • Can we please expand the readme to include how to troubleshoot?
    • Can we please add to the readme examples of the config? I.e. do I need a forward slash for collections? Do I need the port on the server?

    image

    I am using this to test if a change in a doc creates any new document but It always return 0 documents.

    curl -H "X-TYPESENSE-API-KEY: ${TYPESENSE_API_KEY}" \
         -X GET \
        "https://EXAMPLE.com:8108/collections/service"
    {"created_at":1655499258,"default_sorting_field":"","fields":[{"facet":false,"index":true,"infix":false,"locale":"","name":".*","optional":true,"sort":false,"type":"auto"}],"name":"service","num_documents":0,"symbols_to_index":[],"token_separators":[]}%       
    
    opened by idkq 3
  • help setting up

    help setting up

    hi all. I'm running self hosted typesense on AWS via docker. I have nginx redirecting 80 and 443 traffic to locahost:8108, with SSL certificate etc.

    if I visit my-domain.com/health, I get {"ok":true} back. I believe this means nginx is correctly redirecting traffic. however, when I try to trigger calls on firestore, I get this error:

    {
      "textPayload": "Error: Request failed with HTTP code 404 | Server said: Not Found\n    at ApiCall._customErrorForResponse (/workspace/node_modules/typesense/lib/Typesense/ApiCall.js:378:26)\n    at ApiCall._callee$ (/workspace/node_modules/typesense/lib/Typesense/ApiCall.js:186:70)\n    at tryCatch (/workspace/node_modules/regenerator-runtime/runtime.js:63:40)\n    at Generator.invoke [as _invoke] (/workspace/node_modules/regenerator-runtime/runtime.js:293:22)\n    at Generator.next (/workspace/node_modules/regenerator-runtime/runtime.js:118:21)\n    at asyncGeneratorStep (/workspace/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:24)\n    at _next (/workspace/node_modules/@babel/runtime/helpers/asyncToGenerator.js:25:9)\n    at processTicksAndRejections (internal/process/task_queues.js:95:5)",
      "insertId": "000000-1be6577f-97bb-4c82-aa28-74f47012e713",
      "resource": {
        "type": "cloud_function",
        "labels": {
          "project_id": "modify-dev",
          "region": "us-central1",
          "function_name": "ext-firestore-typesense-search-indexToTypesenseOnFirestoreWrite"
        }
      },
      "timestamp": "2021-10-21T21:37:53.973Z",
      "severity": "ERROR",
      "labels": {
        "execution_id": "k67afrdv37p2"
      },
      "logName": "projects/modify-dev/logs/cloudfunctions.googleapis.com%2Fcloud-functions",
      "trace": "projects/modify-dev/traces/0f171f3a97592d67f6c842091303f0b5",
      "receiveTimestamp": "2021-10-21T21:38:03.542328289Z"
    }
    

    when looking at my nginx access logs, I can see that the extension does hit the server. any ideas?

    opened by jonathan-chin 3
  • Firebase extension host

    Firebase extension host

    Description

    I have setup the typesense extension in my Firebase project, but when trying to add a document, i get the following error:

    Error detected in ext-firestore-typesense-search-indexToTypesenseOnFirestoreWrite {"@type":"type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.Insight","errorGroup":"CNTlnprCi-zYJw","exceptionInfo":{"type":"Error","message":"timeout of 10000ms exceeded"},"errorEvent":{"eventTime":"2021-07-08T20:47:32.503Z","message":"Error: timeout of 10000ms exceeded\n at createError (/workspace/node_modules/axios/lib/core/createError.js:16:15)\n at RedirectableRequest.handleRequestTimeout (/workspace/node_modules/axios/lib/adapters/http.js:280:16)\n at RedirectableRequest.emit (events.js:376:20)\n at RedirectableRequest.emit (domain.js:532:15)\n at Timeout._onTimeout (/workspace/node_modules/follow-redirects/index.js:166:12)\n at listOnTimeout (internal/timers.js:555:17)\n at processTimers (internal/timers.js:498:7)","serviceContext":{"resourceType":"cloud_function","service":"ext-firestore-typesense-search-indexToTypesenseOnFirestoreWrite"}}}

    I am hosting the server on my local machine for the time being, so perhaps the problem is stemming from the host name that I used when setting up the extension. I set up port forwarding in order to get a global IP address, and used that address XX.XX.XX:8108 as the host name. Sending curl requests via the terminal to that host name works, however.

    opened by aaronkbutler 3
  • Typesense port protocol params

    Typesense port protocol params

    Change Summary

    If Typesense self hosted cluster is not running at 443 port, firestore will not sync changes image

    PR Checklist

    opened by Bermudez0622 1
  • Resource_Error

    Resource_Error

    Hi Typesense Team

    i get the following message when i try to install this extension with the console and cli

    RESOURCE_ERROR at /deployments/firebase-ext-firestore-typesense-search/resources/backfillToTypesenseFromFirestore: {"ResourceType":"gcp-types/cloudfunctions-v1:projects.locations.functions","ResourceErrorCode":"400","ResourceErrorMessage":"Build failed: {"metrics":{},"error":{"buildpackId":"","buildpackVersion":"","errorType":"OK","canonicalCode":"OK","errorId":"","errorMessage":""},"stats":[{"buildpackId":"google.nodejs.runtime","buildpackVersion":"1.0.0","totalDurationMs":1496,"userDurationMs":0},{"buildpackId":"google.utils.archive-source","buildpackVersion":"0.0.1","totalDurationMs":45,"userDurationMs":44},{"buildpackId":"google.nodejs.npm","buildpackVersion":"1.0.0","totalDurationMs":6428,"userDurationMs":6185},{"buildpackId":"google.nodejs.functions-framework","buildpackVersion":"0.9.4","totalDurationMs":3756,"userDurationMs":3541},{"buildpackId":"google.config.entrypoint","buildpackVersion":"0.9.0","totalDurationMs":0,"userDurationMs":0},{"buildpackId":"google.utils.label","buildpackVersion":"0.0.2","totalDurationMs":0,"userDurationMs":0}],"warnings":null,"customImage":false}"}; RESOURCE_ERROR at /deployments/firebase-ext-firestore-typesense-search/resources/indexToTypesenseOnFirestoreWrite: {"ResourceType":"gcp-types/cloudfunctions-v1:projects.locations.functions","ResourceErrorCode":"400","ResourceErrorMessage":"Build failed: {"metrics":{},"error":{"buildpackId":"","buildpackVersion":"","errorType":"OK","canonicalCode":"OK","errorId":"","errorMessage":""},"stats":[{"buildpackId":"google.nodejs.runtime","buildpackVersion":"1.0.0","totalDurationMs":1485,"userDurationMs":0},{"buildpackId":"google.utils.archive-source","buildpackVersion":"0.0.1","totalDurationMs":59,"userDurationMs":59},{"buildpackId":"google.nodejs.npm","buildpackVersion":"1.0.0","totalDurationMs":6677,"userDurationMs":6425},{"buildpackId":"google.nodejs.functions-framework","buildpackVersion":"0.9.4","totalDurationMs":3689,"userDurationMs":3477},{"buildpackId":"google.config.entrypoint","buildpackVersion":"0.9.0","totalDurationMs":0,"userDurationMs":0},{"buildpackId":"google.utils.label","buildpackVersion":"0.0.2","totalDurationMs":0,"userDurationMs":0}],"warnings":null,"customImage":false}"}

    when i look at the cloud functions there is a warning that the functions could not be built - log message from the function:

    Build failed: {"metrics":{},"error":{"buildpackId":"","buildpackVersion":"","errorType":"OK","canonicalCode":"OK","errorId":"","errorMessage":""},"stats":[{"buildpackId":"google.nodejs.runtime","buildpackVersion":"1.0.0","totalDurationMs":1437,"userDurationMs":0},{"buildpackId":"google.utils.archive-source","buildpackVersion":"0.0.1","totalDurationMs":42,"userDurationMs":42},{"buildpackId":"google.nodejs.npm","buildpackVersion":"1.0.0","totalDurationMs":6883,"userDurationMs":6640},{"buildpackId":"google.nodejs.functions-framework","buildpackVersion":"0.9.4","totalDurationMs":3529,"userDurationMs":3323},{"buildpackId":"google.config.entrypoint","buildpackVersion":"0.9.0","totalDurationMs":0,"userDurationMs":0},{"buildpackId":"google.utils.label","buildpackVersion":"0.0.2","totalDurationMs":0,"userDurationMs":0}],"warnings":null,"customImage":false}

    Thanks Michael

    opened by mibto 5
  • Out-of-order function triggers result in data inconsistency between Firestore -> Typesense

    Out-of-order function triggers result in data inconsistency between Firestore -> Typesense

    Description

    As noted in the Firebase functions documentation, background function triggers are not guaranteed to be received in the order the changes occured.

    When rapid changes occur in the database, out-of-order events will result in out-of-order processing, meaning Typesense can end up with stale data in it which is not consistent with the final Firestore resting state after the influx of changes.

    From all of the reading I've done, it is a fools-errand to try and fight the system to process them in order -- nevertheless without a solution, extensions like this are difficult to use in production environments.

    Steps to reproduce

    1. Write a demo script / perform an app action rapidly that writes to the database
    2. Observe that the events are received out of order
    3. Quite often, this will result in Firestore containing the wrong data from an old event

    Expected Behavior

    Regardless of the order the events are received, only events newer than the last-processed event should be processed.

    Actual Behavior

    Inconsistent data in Typesense

    Other Findings / Info

    In trying to solve for this, I've attempted to use a Firestore collection to "lock" the item being updated, send to Typesense, and then unlock for future events after writing event context back to the lock endpoint.

    Simplified example (RTDB trigger used here, but Firestore is affected by this as well):

    .database.ref(`tasks/{itemId}`)
    .onWrite(async (change, context) => {
      /**
       * We use a Firestore transaction to create a "lock" at a DB location
       * for a given `itemId`
       */
        const { timestamp, eventId } = context;
        const { itemId } = context.params;
        const timestampRef = firestore
          .collection(`typesenseLocks_tasks`)
          .doc(itemId);
        await admin.firestore().runTransaction(async transaction => {
          const dataChangedTimestamp = new Date(timestamp).getTime();
          const lastUpdatedTimestampDoc = await transaction.get(timestampRef);
          const lastUpdatedData = lastUpdatedTimestampDoc.data();
    
          /**
           * If this is the first time this document was changed (no previous locks),
           * or the last-stored lock timestamp is older than the current event's timestamp,
           * prepare a payload and send to Typesense.
           */
          if (
            (!lastUpdatedData?.timestamp ||
              dataChangedTimestamp > lastUpdatedData.timestamp) &&
            lastUpdatedData?.eventId !== eventId
          ) {
            // Send to Typesense
            await updateTypesense(change, indexer, itemId);
    
            // Finalize Transaction by writing the event timestamp and eventId back to Firestore for comparison by the next events
            transaction.set(timestampRef, {
              timestamp: dataChangedTimestamp,
              eventId
            });
          } else {
            /**
             * Do nothing, current event is older than last-indexed event already recorded, can be safely discarded
             */
          }
        });
    

    In an attempt to fix this, I've tried moving the await updateTypesense(change, indexer, itemId); line inside and outside of the transaction function block, but in both scenarios stale data ends up inside Typesense.

    From logs I've added, the above transaction appears to work, old events are dropped if a newer one has already been processed. But if two events that are extremely close together are processed in the correct order, Typesense occasionally ends up with the first event's payload.

    This led me to believe that perhaps Typesense was parallelizing indexing operations, but since they are confirmed as serialized, I'm back at square one.

    Metadata

    Typsense Version: v0.23 OS: Typesense Cloud Relevant Slack Thread: https://typesense-community.slack.com/archives/C01P749MET0/p1655047418496499

    opened by rosslavery 1
  • Getting HTTP 400 error when trying to enable the Firebase extension through CLI

    Getting HTTP 400 error when trying to enable the Firebase extension through CLI

    Description

    I am using the Firebase CLI to try to enable the extension for a Firebase project. Major note is that the last few times I did this it worked fine, so this seems to be a new issue. I think it may be related to this change: https://github.com/typesense/firestore-typesense-search/commit/44c5b37ce84ea2573cc40419f0e414865bbc4544

    The TYPESENSE_API_KEY parameter appears to be the issue. Previously I had this set as the admin API key, which used to work. Now, when I try to enable the extension, I get an error related to secrets manager, which seems to be saying I have formatted it wrong. Specifically it says it should be formatted like projects/*/secrets/*/versions/* instead of just the API key, but I am not sure exactly how to format my API key like that (I am not sure which each of the asterisks in this case should be)

    Steps to reproduce

    Set up parameters file Run Firebase command to enable extension

    firebase ext:install typesense/firestore-typesense-search --project=projectId --params=params.env --force

    Expected Behavior

    The extension will enabled for my Firebase project

    Actual Behavior

    I receive a HTTP 400 error:

    Error: HTTP Error: 400, Secret ID 123.... is invalid, must be of form projects/*/secrets/*/versions/*

    Metadata

    Typesense Version: v0.23.0.rc27

    OS: MacOS

    opened by jon-flowers 18
  • Support backfill documents in subcollections

    Support backfill documents in subcollections

    Description

    This is a request to support backfill all subcollections return from a collection group query. This could be helpful in use case like, backfill landmarks data from all cities under path: cities/{cityId}/landmarks.

    opened by eysenshi 3
Releases(v0.4.2)
  • v0.4.2(Oct 20, 2022)

    • Fix documentation for backfill ad4038ed55730e89870c030200deeabd35b590e7

    Full Changelog: https://github.com/typesense/firestore-typesense-search/compare/v0.4.1...v0.4.2

    Installation Instructions: To update to this version visit the "Extensions" section of your Firebase project, and click on Upgrade next to the firestore-typesense-search extension. To install this extension for the first time, see Usage Instructions.

    Source code(tar.gz)
    Source code(zip)
  • v0.4.1(Sep 12, 2022)

    • Use for...of instead of forEach in backfill function. Thank you @sreenath-n for reporting this in #37

    Full Changelog: https://github.com/typesense/firestore-typesense-search/compare/v0.4.0...v0.4.1

    Installation Instructions: To update to this version visit the "Extensions" section of your Firebase project, and click on Upgrade next to the firestore-typesense-search extension. To install this extension for the first time, see Usage Instructions.

    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Jul 6, 2022)

    • Sync ref.path to Typesense. Thank you @Guilledorfman for the PR.
    • Ability to backfill specific collections to Typesense, when multiple instances of the extension are installed. Thank you @zzterrozz for pointing this out.

    Full Changelog: https://github.com/typesense/firestore-typesense-search/compare/v0.3.0...v0.4.0

    Installation Instructions: To update to this version visit the "Extensions" section of your Firebase project, and click on Upgrade next to the firestore-typesense-search extension. To install this extension for the first time, see Usage Instructions.

    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Apr 18, 2022)

    • Map Firestore Timestamps to int64 values in Typesense
    • Map Firestore GeoPoint values to Typesense geopoint format
    • Flatten nested field values to top-level keys in Typesense

    Thank you @yamankatby for implementing this! 🙏

    Full Changelog: https://github.com/typesense/firestore-typesense-search/compare/v0.2.8...v0.3.0

    Installation Instructions: To update to this version visit the "Extensions" section of your Firebase project, and click on Upgrade next to the firestore-typesense-search extension. To install this extension for the first time, see Usage Instructions.

    ⚠️ IMPORTANT Upgrade Instructions: If you're upgrading to this version and you have a Firestore timestamp field as one of the fields synced to Typesense, you will have to delete your existing Typesense Collection, recreate it and then backfill your data. This is because, pre v0.3.0, Firestore timestamp fields were synced as (unindexed) objects into Typesense. Starting with v0.3.0, Firestore timestamp fields are typecast to int64 Unix timestamps by this extension. Your existing Typesense collection will already have the timestamp field as an object (created by previous versions of the extension), and typecasting to an int64 field will fail with this new version.

    Source code(tar.gz)
    Source code(zip)
  • v0.2.8(Mar 31, 2022)

    What Changed

    • chore: fixed wrapping issues on postinstall documentation by @dackers86 in https://github.com/typesense/firestore-typesense-search/pull/27
    • feat: added secret configuration parameter by @dackers86 in https://github.com/typesense/firestore-typesense-search/pull/26
    • chore: added default params for required extension fields by @dackers86 in https://github.com/typesense/firestore-typesense-search/pull/25
    • feat: added external services by @dackers86 in https://github.com/typesense/firestore-typesense-search/pull/24

    Contributors

    • Thank you @dackers86 for all the PRs!

    Full Changelog: https://github.com/typesense/firestore-typesense-search/compare/v0.2.7...v0.2.8

    Get Update

    To update to this version visit the "Extensions" section of your Firebase project, and click on Upgrade next to the firestore-typesense-search extension.

    To install this extension for the first time, see Usage Instructions.

    Source code(tar.gz)
    Source code(zip)
  • v0.2.7(Feb 25, 2022)

    • Support for Typesense collection names with special characters

    To update to this version visit the "Extensions" section of your Firebase project, and click on Upgrade next to the firestore-typesense-search extension.

    To install this extension for the first time, see Usage Instructions.

    Source code(tar.gz)
    Source code(zip)
  • v0.2.6(Dec 22, 2021)

    • Update dependencies, to handle import errors

    To update to this version visit the "Extensions" section of your Firebase project, and click on Upgrade next to the firestore-typesense-search extension.

    To install this extension for the first time, see Usage Instructions.

    Source code(tar.gz)
    Source code(zip)
  • v0.2.5(Aug 3, 2021)

    • Increase memory for backfill function

    To update to this version visit the "Extensions" section of your Firebase project, and click on Upgrade next to the firestore-typesense-search extension.

    To install this extension for the first time, see Usage Instructions.

    Source code(tar.gz)
    Source code(zip)
  • v0.2.4(Jul 23, 2021)

    • Increase connection timeout

    To update to this version visit the "Extensions" section of your Firebase project, and click on Upgrade next to the firestore-typesense-search extension.

    To install this extension for the first time, see Usage Instructions.

    Source code(tar.gz)
    Source code(zip)
  • v0.2.3(Jun 30, 2021)

    • Fixes post installation instructions #2

    To update to this version visit the "Extensions" section of your Firebase project, and click on Upgrade next to the firestore-typesense-search extension.

    To install this extension for the first time, see Usage Instructions.

    Source code(tar.gz)
    Source code(zip)
  • v0.2.2(Jun 30, 2021)

    • Fixes #6

    To update to this version visit the "Extensions" section of your Firebase project, and click on Upgrade next to the firestore-typesense-search extension.

    Source code(tar.gz)
    Source code(zip)
  • v0.2.1(Jun 16, 2021)

    • Add additional regions (Resolves #1).

    To update to this version visit the "Extensions" section of your Firebase project, and click on Upgrade next to the firestore-typesense-search extension.

    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Jun 12, 2021)

Owner
Typesense
Fast, typo tolerant search engine for building delightful search experiences.
Typesense
GitHub User Search

GitHub User Search Deployed At https://friendly-yalow-01d498.netlify.app/ User Story As a user, I can search for users and see a paginated list of res

Matthew 6 Apr 26, 2022
🚀 A robust, performance-focused and full-featured Redis client for Node.js.

A robust, performance-focused and full-featured Redis client for Node.js. Supports Redis >= 2.6.12 and (Node.js >= 6). Completely compatible with Redi

Zihua Li 11.6k Jan 8, 2023
A tiny javascript + Flash library that enables the creation and download of text files without server interaction.

Downloadify: Client Side File Creation Important! The swf has been compiled for online use only. Testing from the file path (i.e. file:// ) will not w

Doug Neiner 853 Nov 21, 2022
A service worker that buffers a full video, so when the video tag ask for ranges, these can be satisfied. Play + pause = buffer the whole video.

Full Video Buffer with Service Workers The specification of the preload attribute on a Video element won't allow you to fully buffer a video. This rep

Tito 51 Nov 2, 2022
A typesafe database ORM that exposes the full power of handwritten sql statements to the developer.

TORM A typesafe database ORM that exposes the full power of handwritten sql statements to the developer. import { torm, z } from 'https://deno.land/x/

Andrew Kaiser 15 Dec 22, 2022
plain text editor

writer Plain text editor from scratch, made for the web. Drag and drop files to open them. Architecture Buffer is an array of array of lines Text is m

Paco 332 Jan 4, 2023
An adapter-based ORM for Node.js with support for mysql, mongo, postgres, mssql (SQL Server), and more

Waterline is a next-generation storage and retrieval engine, and the default ORM used in the Sails framework. It provides a uniform API for accessing

Balderdash 5.4k Jan 4, 2023
NodeJS PostgreSQL database performance insights. Locks, index usage, buffer cache hit ratios, vacuum stats and more.

Node Postgres Extras NodeJS port of Heroku PG Extras with several additions and improvements. The goal of this project is to provide powerful insights

Paweł Urbanek 68 Nov 14, 2022
A starter template for Nest.js with MongoDB, GraphQL, JWT Auth, and more!

A progressive Node.js framework for building efficient and scalable server-side applications. Description Nest framework TypeScript starter repository

Michael Guay 19 Dec 25, 2022
A student-made, student-tailored Firefox add-on for Veracross. Provides ease of navigation in Veracross, among with other quality of life features. More features in progress.

Check out the Chrome version! This release is version 1.0.0, so the only feature it has is clickable links to the dropbox from the classpage. Any comm

Webb School CS Club 3 Nov 25, 2022
A joi extension to validate MongoDB's ObjectIDs

@marsup/joi-objectid This is a simple joi extension to validate MongoDB's ObjectIDs. Installation npm install --save @marsup/joi-objectid Usage const

Nicolas Morel 2 Dec 15, 2022
GraphQL extension for coc.nvim

GraphQL extension for coc.nvim

yaegassy 7 Sep 4, 2022
AlaSQL.js - JavaScript SQL database for browser and Node.js. Handles both traditional relational tables and nested JSON data (NoSQL). Export, store, and import data from localStorage, IndexedDB, or Excel.

Please use version 1.x as prior versions has a security flaw if you use user generated data to concat your SQL strings instead of providing them as a

Andrey Gershun 6.1k Jan 9, 2023
ORM for TypeScript and JavaScript (ES7, ES6, ES5). Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, SAP Hana, WebSQL databases. Works in NodeJS, Browser, Ionic, Cordova and Electron platforms.

TypeORM is an ORM that can run in NodeJS, Browser, Cordova, PhoneGap, Ionic, React Native, NativeScript, Expo, and Electron platforms and can be used

null 30.1k Jan 3, 2023
A query builder for PostgreSQL, MySQL and SQLite3, designed to be flexible, portable, and fun to use.

knex.js A SQL query builder that is flexible, portable, and fun to use! A batteries-included, multi-dialect (MSSQL, MySQL, PostgreSQL, SQLite3, Oracle

knex 16.9k Jan 4, 2023
TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, PostgreSQL and SQLite databases.

TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, PostgreSQL and SQLite datab

MikroORM 5.4k Dec 31, 2022
Azure Data Studio is a data management tool that enables you to work with SQL Server, Azure SQL DB and SQL DW from Windows, macOS and Linux.

Azure Data Studio is a data management tool that enables working with SQL Server, Azure SQL DB and SQL DW from Windows, macOS and Linux.

Microsoft 7k Dec 31, 2022
A Gmail Clone which built with ReactJS and Redux. You can sign in with your Google Account, compose a new e-mail and send realtime emails to the project.

Gmail Clone with ReactJS A Gmail Clone that you can sign in with your Google Account, compose a new e-mail and send realtime emails to the project. Cl

Özge Coşkun Gürsucu 49 Nov 14, 2022