Я настроил pg_search в своем приложении Rails на Heroku:
@query = 'fast'
PgSearch.multisearch(@query) #=>
[#<PgSearch::Document searchable: ferrari, :content: 'this car is really fast'>,
#<PgSearch::Document searchable: viper, :content: 'a very fast car'>]
Я хотел бы отобразить эти результаты с выдержками из content
, чтобы показать, где происходит совпадение. Я могу вызвать excerpt(content, @query)
, чтобы получить именно то, что мне нужно, когда @query
— это всего лишь одно слово, а excerpt()
обрабатывает только точные совпадения, поэтому, если:
@query = 'car fast'
PgSearch.multisearch(@query) #=>
[#<PgSearch::Document searchable: ferrari, :content: 'this car is really fast'>,
#<PgSearch::Document searchable: viper, :content: 'a very fast car'>]
тогда excerpt(content, @query)
равно нулю, потому что нигде в content
не появляется точная фраза «автомобиль быстро».
Я считал, что excerpt(content, @query.split(' ').first)
по крайней мере показывает что-то для запросов, состоящих из нескольких слов, но все еще бывают такие случаи:
@query = 'car?'
@results = PgSearch.multisearch(@query) #=>
[#<PgSearch::Document searchable: ferrari, :content: 'this car is really fast'>,
#<PgSearch::Document searchable: viper, :content: 'a very fast car'>]
excerpt(@results.first.content, @query) #=> nil
Итак, как люди показывают выдержки из результатов поиска при использовании pg_search?