1

Searchkick の Readme といくつかの例に従った後、belongs_to 関連付けを含むかなり単純な検索を実装しようとしました。それでも、私が望んでいた動作が見られません。小さな何かが欠けていることを願っています...

私は、著者に属している本のモデルを持っています。書籍名または著者名で検索できるようにしたいと考えています。たとえば、「Stone」を検索すると、「Stone Phillips」(著者) と「A Stone's Throw」(本) の両方が表示されます。さらに、検索を「ストーン メドウ」に変更すると、ストーン フィリップスが著者として「マイ メドウ」というタイトルの本とともに返されます。

最初の例を解決する方法を見つけましたが、2 番目の例を機能させることができません。現在、「associated_against」メソッドを使用して、上記の両方の例を簡単に実行する単純な pg_search があります。Searchkick はそれと同じくらい簡単なものを提供すると思っていましたが、うまくいかないようです...

私が試した主なアプローチ:

私のコントローラーで

@search = Book.search params[:query],
      limit: 30,
      fields: [:book_name, :author_name], 
      misspellings: false

そして私のモデルでは(最初は「search_data」メソッドだけで、後でスコープを追加しました...)

scope :search_import, -> { includes(:author) } 
  
  def search_data
    {
      book_name: book_name,
      author_name: author(&:author_name)
    }
  end

このアプローチでは、何らかの理由で著者名に関する結果が返されません。1 単語検索を使用すると、関連する書籍名しか表示されず、複数単語検索を使用しても結果が表示されません。

また、これを Author モデルを介して実行するように切り替えてみましたが、書籍と著者の両方の結果が得られるため、うまく機能しているようです。ただし、関係のないガベージ結果もたくさん得られます。また、まだ 1 語で検索した場合の結果しか表示されず、2 語で検索した場合の結果は表示されません。

また、コントローラー コードに複数のモデル インデックスを追加しようとしました。

@search = Book.search params[:query],
      limit: 30,
      index_name: [Book.searchkick_index.name, Author.searchkick_index.name],
      fields: [:book_name, :author_name], 
      misspellings: false

これは実際には、1 つの単語に対して最良の結果セットを提供します。期待されるすべての本の名前と著者名をゴミなしで返します。しかし、検索を絞り込むために2番目の単語を追加しようとすると、結果が得られません...

他の投稿やチュートリアルなどからの提案を使用して、他にもいくつかの小さな変更を試みました。また、誰かが疑問に思っている場合に備えて、search_data または searchkick メソッドに変更を加えた後、常にインデックスを再作成しています。

十分な情報を提供できたことを願っていますが、ご不明な点がありましたらお知らせください....何が私を逃しているのかわかりません。どんな助けでも大歓迎です!

4

1 に答える 1