Я устанавливаю базу данных mongoDB, чтобы разрешить (простой) поиск по ключевым словам с использованием многопользовательских клавиш, как рекомендовано здесь . Запись тоже похожа:
{ title: { title: "A river runs through", _keywords: ["a","river","runs","through"] ) , ... }
Я использую серверную часть nodejs, поэтому использую javascript. Следующий запрос будет соответствовать (он был запущен в терминале Монго):
> db.torrents_sorted.find({'title._keywords' : {"$all" : ["river","the"]} }).count()
210
Однако это не так:
> db.torrents_sorted.find({'title._keywords' : {"$all" : ["/river/i","/the/i"]} }).count()
0
> db.torrents_sorted.find({'title._keywords' : {"$all" : [{ "$regex" : "river", "$options" : "i" },{ "$regex" : "the", "$options" : "i" }]} }).count()
0
Использование одного регулярного выражения (без использования $ и / или $ all) соответствует:
db.torrents_sorted.find ({'title._keywords': {"$ regex": "river", "$ options": "i"}}). Count ()
1461
Интересно, что использование python и pymongo для компиляции регулярных выражений работает:
>>> db.torrents_sorted.find({'title._keywords': { '$all': [re.compile('river'), re.compile('the')]}}).count();
236
Я не обязательно ищу решение, которое использует регулярные выражения, однако требуется, чтобы ключевые слова соответствовали более коротким строкам, чтобы "riv" соответствовало "реке", что кажется идеальным для регулярных выражений (или LIKE в sql).
Моя следующая идея - попытаться передать функцию javascript, которая выполняет сопоставление регулярного выражения в списке, или, возможно, передать отдельную функцию для каждого регулярного выражения (это, похоже, кричит мне на хак :), хотя я предполагаю, это будет медленнее, а производительность очень важна.