#javascript #node.js #mongodb
#javascript #node.js #mongodb
Вопрос:
У меня возникли некоторые проблемы с полнотекстовым поиском в MongoDB. Допустим, у меня есть это:
db.test.insert({fname:"blah.dll"})
db.test.insert({fname:"something.dll"})
db.test.ensureIndex({fname:"text"})
Тогда я делаю…
db.test.runCommand("text", { search: "blah.dll" })
Это возвращает оба документа. Кажется, что точка приводит к тому, что это: вздор ИЛИ dll.
Каков правильный способ поиска в этом случае?
Спасибо.
Комментарии:
1. Вы пытались избежать
.
с.
помощью?2. Да, к сожалению, это тоже не работает.
3. Попробуйте выполнить поиск точной фразы с помощью
""blah.dll""
.4. Это действительно работает. Кажется странным, что мне нужно было бы сделать это только для поиска термина, в котором есть точка. Спасибо!
5. @BenFortune Есть ли шанс, что вы могли бы использовать это в качестве ответа? Это просто помогло мне.
Ответ №1:
Как указал Бен Форчун в комментарии к исходному вопросу, вы можете предотвратить разделение, заключив искомое слово в кавычки:
db.test.runCommand(«текст», { поиск: ‘»blah.dll «‘ })
Важным моментом является то, что это также изменяет семантику вашего запроса, поскольку каждое слово, заключенное в кавычки, требует соответствия:
‘blah.dll что-то’ — возвращает документы, содержащие вздор или dll или что-то в этом роде.
‘blahdll something’ — возвращает документы, содержащие blahdll или что-то в этом роде.
‘»blah.dll «что-то» — возвращает документы, содержащие blah.dll (обязательно) и что-то еще (необязательно).
‘»blah.dll » «что-то»‘ — возвращает документы, содержащие blah.dll (обязательно) и что-то еще (обязательно).