Как реализовать общий поиск по идентификатору монго при использовании динамических атрибутов в Rails - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть коллекция с именем Example, все поля коллекции являются динамическими.Я хочу выполнить общий поиск.Я понятия не имею, как я могу сделать.Например, если я ищу «привет», он должен вернуть все объекты коллекции, которая содержит имя, независимо от того, в каких полях содержится значение.

Пример:

{ id: 111234, desc: 'hello world' },     
{ id: 545ttt, title: 'hello title' }, 
{ id: sfsd3, data: 'hello' }

Мой запрос долженвернуть все вышеупомянутые записи, если я ищу привет.Я нашел драгоценный камень mongoid_search, но не нашел ничего связанного с поиском динамических полей.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Вы также можете создать «виртуальное поле», которое содержит объединенное содержимое всех строковых полей.Затем используйте это с mongoid_search:

search_in :search_data

def search_data
  self.attributes.select{|k,v| v.is_a?(String) }.values.join(' ')
end

Как это работает: гем mongoid_search запускает метод search_data перед каждым сохранением и использует свой вывод для заполнения (скрытого) поля _keywords.Это поле затем используется для фактического поиска, когда вы делаете что-то вроде YourModel.full_text_search('hello').

0 голосов
/ 26 февраля 2019

Шаг 1. Создать текстовый индекс для всех полей.

db.collection.createIndex({ "$**": "text" },{ name: "TextIndex" })

Шаг 2. Вы можете сделать простой текстпоиск с $ text как следующий объект запроса:

{ $text : { $search: <your string> } }
...