Поиск текста в MongoDB с точками

#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 (обязательно) и что-то еще (обязательно).