Есть ли такой же метод в плагине Grails GORM MongoDB, как метод поиска ()? - PullRequest
0 голосов
/ 17 ноября 2011

Я использовал плагин Grails Searchable, и теперь мы перешли на плагин GORM MongoDB. Плагин Searchable имеет метод search (), который позволяет искать во всех полях, используя логические коннекторы и шаблоны. Есть ли подобный метод в плагине Grails GORM MongoDB?

Если нет, то каковы наилучшие методы для создания аналогичного метода?

Ответы [ 2 ]

1 голос
/ 26 августа 2012

Плагин для поиска, а также плагин Elasticsearch, похоже, полагаются на плагин Hibernate и не работают с MongoDB GORM. Я реализовал простой сервис поиска для Mongo с использованием низкоуровневого API и оператора mongo '$ regex':

Вот пример поиска по свойству 'content' класса домена с именем "Page"

class SearchService {
  static transactional = false
   def query(String query){
    return Page.collection.find( ['content':['$regex':query, '$options': 'i']]).collect({
      it as Page
    })

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

По сути, поиск по регулярному выражению, как упомянуто Lucas T, является лучшим способом построения гибкого поиска, но я бы не рекомендовал использовать поиск по регулярному выражению игнорирования регистра ('$ options': 'i').При использовании игнорирования регистра mongodb не может использовать индексы и должен проверять каждый отдельный документ, что приводит к низкой производительности.

Мой подход заключается в добавлении нового поля в документ, в котором вы сохраняете нормализованные ключевые слова поиска для каждого документа.Я обычно нормализую ключевые слова, уменьшая регистр и выделяя символы, которые трудно обработать в регулярных выражениях - последнее зависит от ваших данных и потребностей запросов.Сравнение регулярного выражения с началом также более эффективно использует индекс.

См. В конце страницы: http://docs.mongodb.org/manual/reference/operator/regex/

...