PouchDB выполняет поиск текста по отдельным полям, используя $ или и используя индексацию - PullRequest
0 голосов
/ 25 марта 2020

Ситуация :

  • с использованием PouchDB в качестве базы данных документов (встроенных!) В моем приложении Nodejs.
  • запрос 400.000 записей записей пользователя (или далее)
  • указание фильтра "имя", который может соответствовать первому ИЛИ полю фамилии
  • структура документа, например (например):
    • { _id: unique_1234, firstname: "john", lastname: "doo", age: 32, zip: "90210", email: "test@some.com", phone: "1234567890" }
  • сгенерировал индексы для различных полей, также пробовал с картами / уменьшить и просмотры ....
  • успешные "очень быстрые" запросы на прямых полях "соответствия" ( например, на zip, email, et c ... с $ eq и $ and)

Задача :

  • невозможно выполнить быстро например, запросы: $or: [ { "firstname": filter}, {"lastname": filter}] или $regex
  • невозможно принудительно использовать, используя любые заданные индексы c (например, по имени и фамилии), когда find () и с помощью селектора $or или $in
  • выходит из памяти при попытке выполнить какую-либо ручную фильтрацию на allDocs()
  • , если не соответствует правильному виду при использовании find(), и выходит из памяти ry
  • чрезвычайно медленные запросы или нехватка памяти при использовании $regex
  • определение представлений и использование query() не помогает, или я не могу понять, как это можно использовать для текста совпадения в одном из обоих полей имени

Я также попробовал все виды дополнительных способов сделать «более быстрый» поиск, например «нормализовать» имена, например, удалить все символы и пробелы, отличные от alphanum, в обеих частях, concat, используйте подстановочные знаки, et c. Ничего не помогает.

Я не эксперт по Pouchdb (или Couchdb), но я пытался читать и следовать всем API и руководствам, но все равно ни к чему не привел. Что я мог попробовать дальше?

...