【问题标题】:Cloud Firestore Query Array from Full String来自完整字符串的 Cloud Firestore 查询数组
【发布时间】:2019-10-28 07:01:27
【问题描述】:

我在 Firebase 中有一个集合,其中包含多条记录,每条记录都包含一个名称和一组用于记录“关键字”的字符串。下面的例子。

Record_1
   name: Record 1
   keywords: [apple, orange, raspberry]
Record_2
   name: Record 2
   keywords: [orange, strawberry, raspberry]
Record_3
   name: Record 3
   keywords: [apple, pear, strawberry]


//Search String: “I would like an apple and an orange.”

//Returns results: Record_1 and Record_2

我想从文本字段中的用户搜索字符串运行搜索。不幸的是,这个字符串可能包含在任何关键字数组中都不存在的单词。

我想从搜索字符串中返回具有所有匹配关键字的记录,但不是限制是由于数组中搜索字符串中不存在的单词。请参阅上面的示例“搜索字符串”和“返回结果”。

有什么想法吗? 谢谢

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    目前没有单一的查询可以为您执行此操作。您必须创建多个 array_contains queries,每个字符串对应一个您要查找的字符串。

    collectionRef.where("keywords", "array-contains", "thing-to-look-for")
    

    然后,您可以合并客户端上每个查询的结果,以删除任何重复项。

    【讨论】:

    • 你觉得我的回答怎么样?它肯定只适用于几个单词,即一个小字符串,但是,一旦你不能期望完全匹配,它就会变得更加复杂。
    • OP 没有需要全文搜索引擎才能到达的“全文”。它们在数组中有简单的字符串,可以完全匹配以找到。
    • 您是否已自行设置以了解它需要多少工作、可能花费多少以及它是否真的按您期望的方式工作?
    • 没有。我很高兴对此进行全面披露(更新了我的答案以使其更加清晰)。无论如何,我仍然会指出 Algolia 存在于多个 array-contains 查询不能完美工作的情况下。因此,我将保留我的答案,但是,您应该是首选答案。
    猜你喜欢
    • 2021-12-04
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多