Rails текстовый поиск с использованием массива ключевых слов - PullRequest
0 голосов
/ 11 марта 2011

У меня есть модель Post, которая состоит из заголовка и содержимого.

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

Пример

If the title is : Today its a nice day
and the content: Today I woke up at 7am and..

Я хотел бы, чтобы это было возвращено, если пользователь использует термин: "day woke 7am"

Я не предпочитаю использоватьлюбой полнотекстовый поиск, так как это бит дорогой на heroku, где размещено мое приложение.

Как лучше всего реализовать подобный sql-поиск?Можно ли применить некоторые оценки к моим результатам?Кто-нибудь может показать мне фрагменты кода?

Ответы [ 3 ]

0 голосов
/ 11 марта 2011

Один очень простой способ - использовать метод "-" Ruby's Array:

p 'получил один' если 'день проснулся 7 утра'.Сегодня я проснулся в 7 утра и '.downcase.split (' ') == []

0 голосов
/ 21 марта 2011

Я хотел бы код, который вы пишете в вашей модели Post. Я бы сделал метод, который бы

  1. принять строку поиска в качестве параметра
  2. уменьшить строку поиска и превратить ее в массив 2а. Я бы посоветовал убрать все одно- или двухсимвольные слова
  3. тогда я бы перебрал таблицу сообщений. Когда я прохожу каждую строку, я бы - объединить заголовок и текст, уменьшить комбинацию и превратить ее в массив - выполнить массив - операцию с массивом и сохранить каждый пост, где результатом является пустой массив
  4. вернуть полученные сообщения

Это не проверено - у меня нет такой модели, как ваша модель Post, но, надеюсь, вы можете получить то, что я делаю здесь:

def charlie_search (search_string) output_array = [] Post.all.each do | p | output_array.push (p.id), если search_string.downcase.split - (p.title.downcase.split + p.description.downcase.split) == [] конец Post.find (output_array) конец

Я не понимаю, что дорого в вашей ситуации.

Вы можете просто разместить окно поиска на сайте Google на своем сайте (я думаю, у Google все еще есть эта служба), и позволить Google проиндексировать все ваши страницы, а затем, когда кто-то делает поиск, они получат списки поиска типа Google для просто твой сайт.

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

0 голосов
/ 11 марта 2011

Попробуйте Sunspot для Solr

http://github.com/outoftime/sunspot

Отредактировано:

Может помочь следующее.

Articles.find(:all, :conditions => ["match(title,body) against (?)", "Databases"] )

Здесь заголовок и телостолбцы базы данных и ключевое слово «Базы данных».Для дополнительных опций проверьте совпадение в mysql.

http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...