使用多字段 Firestore 进行搜索
Search with multi fields firestore
我收集了一些地方:
PLaces:
doc1:
title: "Paris"
category: "Pharmacy"
city: "Paris"
doc2:
title: "Paris"
category: "Pharmacy
city: "New york"
doc3:
title: "Paris"
category: "School
city: "New york"
如果我想搜索名称中包含 Paris 的地方,我会执行以下操作:
> db.collection('places')
> .orderBy('title')
> .startAt(['Paris']).endAt(['Paris'+ '\uf8ff']).getDocuements();
这会告诉我所有包含巴黎这个名字的地方。
但是,我如何才能搜索符合其他条件的地点,例如
仅获取名称为 paris 的 Pharmacy 或 pharmacy paris in city Paris 知道有一个允许输入搜索关键字的输入字段
输入搜索示例:
- 'Pharmacy paris'
- 'Pharmacy paris NewYork'
这在 Cloud Firestore 中是否可行?如果没有,有没有其他方法可以做到这一点?
如果您询问是否可以接受单个字符串并使用它跨字段搜索,不,这是不可能的。 Firestore 不是文本搜索引擎。
您可以跨字段查询的唯一方法是使用 compound search query,如该文档中所述。您必须调出要匹配的每个字段,并且每个查询只能有一个范围过滤器(因此您不能对多个字段使用 startAt/EndAt)。您将需要使用字段的准确值来过滤结果。
如果要全文搜索,文档推荐mirroring your data to an actual text search engine。
我收集了一些地方:
PLaces:
doc1:
title: "Paris"
category: "Pharmacy"
city: "Paris"
doc2:
title: "Paris"
category: "Pharmacy
city: "New york"
doc3:
title: "Paris"
category: "School
city: "New york"
如果我想搜索名称中包含 Paris 的地方,我会执行以下操作:
> db.collection('places')
> .orderBy('title')
> .startAt(['Paris']).endAt(['Paris'+ '\uf8ff']).getDocuements();
这会告诉我所有包含巴黎这个名字的地方。
但是,我如何才能搜索符合其他条件的地点,例如
仅获取名称为 paris 的 Pharmacy 或 pharmacy paris in city Paris 知道有一个允许输入搜索关键字的输入字段
输入搜索示例:
- 'Pharmacy paris'
- 'Pharmacy paris NewYork'
这在 Cloud Firestore 中是否可行?如果没有,有没有其他方法可以做到这一点?
如果您询问是否可以接受单个字符串并使用它跨字段搜索,不,这是不可能的。 Firestore 不是文本搜索引擎。
您可以跨字段查询的唯一方法是使用 compound search query,如该文档中所述。您必须调出要匹配的每个字段,并且每个查询只能有一个范围过滤器(因此您不能对多个字段使用 startAt/EndAt)。您将需要使用字段的准确值来过滤结果。
如果要全文搜索,文档推荐mirroring your data to an actual text search engine。