Heroku の Rails アプリで pg_search をセットアップしました。
@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
これらの結果を からの抜粋とともに表示して、一致が発生した場所を示したいと思います。1 つの単語しかない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'>]
thenexcerpt(content, @query)
は nil です。'car content
fast' という正確なフレーズがどこにも現れないからです。
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 を使用する場合、検索結果からの抜粋をどのように表示するのでしょうか?