Поиск с несколькими полями firestore - PullRequest
0 голосов
/ 18 июня 2020

У меня есть коллекция мест:

PLaces:
  doc1:
   title:    "Paris"
   category: "Pharmacy"
   city:      "Paris"
 doc2:
   title:     "Paris"
   category:   "Pharmacy
   city: "New york"

  doc3:
   title:     "Paris"
   category:   "School
   city: "New york"

И если я хочу найти места, в названии которых есть Париж, я бы сделал следующее:

>  db.collection('places')
>     .orderBy('title')
>     .startAt(['Paris']).endAt(['Paris'+ '\uf8ff']).getDocuements();

И это будет мне все места, которые содержат название paris.

Однако, как я смогу найти места с другими критериями, такими как

, получить только аптеку с названием paris или аптеку paris в городе Paris Зная, что есть одно поле ввода, в которое можно ввести ключевые слова для поиска

пример ввода Поиск:

  • 'Pharmacy paris'
  • 'Pharmacy paris NewYork '

Возможно ли это вообще в Cloud Firestore? Если нет, есть ли другой способ сделать это?

1 Ответ

1 голос
/ 18 июня 2020

Если вы спрашиваете, можно ли принять одну строку и искать с ней по полям, нет, это невозможно. Firestore не является системой текстового поиска.

Вы можете выполнять запросы по полям только с помощью составного поискового запроса , как описано в этой документации. Вы должны вызвать каждое поле, которое хотите сопоставить, и у вас может быть только один фильтр диапазона для каждого запроса (поэтому вы не можете использовать startAt / EndAt с несколькими полями). Вам нужно будет использовать точные значения полей для фильтрации результатов.

Если вам нужен полнотекстовый поиск, документация рекомендует зеркальное отображение ваших данных в реальной поисковой системе .

...