2016-02-19 5 views
-2

У меня есть приложение Rails, в котором пользователи могут публиковать статьи в блогах и искать статьи.PostgreSql поиск - отображение фрагментов текста, соответствующих запросу

В результатах поиска есть простой способ показать выдержки из статей, которые соответствуют слову (-ам) в запросе?

class Article < ActiveRecord::Base 
    def self.description_search(query) 
    if query.present? 
     where("description @@ ?", query) 
    else 
     scoped 
    end 
    end 
end 

Например, я хотел бы, чтобы извлечь что-то вроде «... Джон прыгает акула на солнечный ...» из следующего примера статьи, если бы я искал „акула“ по всем статьям:

Джон прыгает на кровать. Джон прыгает на кровать. Джон прыгает на кровать. Джон прыгает с кровати. Джон прыгает на кровать. Джон прыгает на кровать. Джон прыгает кровать. Джон прыгает на кровать. Джон прыгает на кровать. Джон прыгает акула в солнечный день. Джон прыгает на кровать.

+0

Написать код о том, что вы пытаетесь сделать, и то, что вы сделали до сих пор? – techdreams

+0

@techdreams Хорошо, я добавил пример кода. – user1515295

ответ

-1

Чтобы получить отрывок т.е. краткие данные вы можете сделать следующее

@blogs=Blog.where("coloumn like ?",params[:q]) 
@blogs.each do |blog| 
puts blog.article.truncate(10) // this line will truncate text after 10 characters, so u will get a brief data 
end 
+0

Будет ли это всегда показывать, где ключевое слово соответствует статье? Похоже, что он будет принимать первые 10 символов. Если ключевое слово было найдено в статье после первых 10 символов, то похоже, что это не сработает, правильно? – user1515295

+0

он будет соответствовать ключевому слову, указанному в столбце блога, здесь вы, кажется, confuser с функцией truncate, результат результата будет состоять из множества символов, поэтому эта функция заменит текст после 10 символов ... например. john прыгает на кровать => Джон прыгает ..... – Apoorv

+0

Спасибо за быстрый ответ! Я обновил вопрос, чтобы показать, что если «акула» является ключевым словом, как я могу вернуть 10 символов вокруг «акулы»? Я думаю, что 'blog.article.truncate (10)' вернет только первые 10 символов. – user1515295

Смежные вопросы