Как сделать текстовый поиск в mgo?

Я пытаюсь найти "efg" в поле "abc"

c.Find(bson.M{"$text": bson.M{"abc": "efg"}})

c - объект коллекции. Я не получаю никакого результата. Что я делаю не так?


person Chakradar Raju    schedule 20.05.2014    source источник
comment
Можете ли вы попробовать выполнить текстовый поиск в оболочке mongodb?   -  person nvcnvn    schedule 20.05.2014
comment
да, даже в оболочке монго я не получаю ожидаемого результата.   -  person Chakradar Raju    schedule 20.05.2014
comment
Правильно ли вы подготовили свою базу данных, я еще не занимаюсь текстовым поиском, но я думаю, вы должны что-то включить или создать какой-то индекс...   -  person nvcnvn    schedule 20.05.2014


Ответы (2)


Вы генерируете {$text:{abc:"efg"}}, но ваш запрос должен выглядеть так: {$text:{$search:"efg"}}

Поэтому попробуйте обновить свой код до:

c.EnsureIndexKey("abc")
c.Find(bson.M{"$text": bson.M{"$search": "efg"}})

Имейте в виду, что для поиска с помощью $text необходимо указать индекс. Ознакомьтесь с этим документом, в котором объясняется, как его использовать: http://docs.mongodb.org/manual/reference/operator/query/text/

person Goodwine    schedule 20.05.2014

используйте $regex(option i для регистронезависимых)
пример:

c.Find(bson.M{"abc": &bson.RegEx{Pattern: "efg", Options: "i"}})
person thesyncim    schedule 21.05.2014
comment
Я думаю, что он спрашивает конкретно о поиске с помощью текстовых индексов MongoDB. - person matheuscscp; 19.08.2019