Как создать индекс для поиска, основанный на значениях, которые не являются строками? Например:MongoDB: индекс текста включает в себя нестроковые типы данных
> db.people.ensureIndex({age: 'text', first_name: 'text', last_name:'text', _id:'text'})
> db.people.insert({age: 27, first_name:"Freddie", last_name: "Mercury"})
> db.people.find()[0]
{ "_id" : ObjectId("5441ebe78fe20d0fae7b05b6"), "age" : 27, "first_name" : "Freddie", "last_name" : "Mercury" })
> db.people.find({$text: {$search: '5441ebe78fe20d0fae7b05b6'}})
(no results)
> db.people.find({$text: {$search: '27'}})
(no results)
Я хотел бы создать поисковый индекс, основанный на несколько ключей, но некоторые из них являются NumberLong, ObjectId и т.д. $ поиска требует строки. Клиент также может отправить запрос, например "27 Freddie"
. Могу ли я заставить индекс передавать все значения в строки, ради этого индексирования/поиска?
Правда, что объединение полей вряд ли, однако, будучи в состоянии искать «Freddie Mercury» (сочетающие поля), но не в состоянии для целочисленных полей кажется неинтуитивным к клиенту. Включение поля поиска вручную будет работать, но сложно поддерживать его во время обновлений. Пример: что, если пара kay/val удаляется, если индекс 'search' терпит неудачу? Я генерирую новую строку индекса каждый раз, когда обновляется даже одно поле? Это всего лишь пара проблем, которые mongo уже решила по большей части (текстовые индексы по умолчанию являются разреженными). – KFunk