Игнорирование одного конкретного или любого специального символа при поиске в pymongo - PullRequest
0 голосов
/ 17 декабря 2018

Итак, у меня есть некоторые продукты в моем mongodb, которые перечислены ниже

  1. Сладости Санта-Клауса
  2. сладкие херли
  3. Качественно-сладкие

Теперь запросы, которые я получаю, выполняются в небольшом кейсе, а иногда и со специальными символами или без специальных символов.Итак, как я могу построить запрос, который может дать точный результат?Например, если пользователь ввел « quality sweet », он должен совпадать с « Quality-Sweet » в моем mongodb.Если пользователь ввел « HERLEYS SWEET » в верхнем регистре, то он должен соответствовать « herleys sweet » (как показано выше в моем MongoDB)

db.product.find({"Product":re.compile('^' + re.escape(pr) + '$',re.IGNORECASE)})

У меня естьприведенный выше запрос, который работает с прописными или строчными буквами, но если пользователь ищет что-то вроде «herleys-sweet», то он не работает.

1 Ответ

0 голосов
/ 17 декабря 2018

Одна вещь, которую вы можете сделать, это использовать функцию re.sub() для замены специальных символов чем-то другим.

У вас может быть что-то вроде этого:

db.product.find({"Product":re.compile('^' + re.sub('[<list of special characters>]', '<string to replace with>', pr) + '$',re.IGNORECASE)})

Например:

  • создайте список специальных символов: [\-\_\~\!\\\/\^\$\%]

  • выберите, чем заменить специальные символы.Может быть пробел ' ' или что-нибудь .*.

Тогда вы получите:

db.product.find({"Product":re.compile('^' + re.sub('[\-\_\~\!\\\/\^\$\%]', '.*', pr) + '$',re.IGNORECASE)})
...