どなたか、次のことについてアドバイスをいただけないでしょうか。
searchkick/elasticsearch を使用しており、複数のフィールド (名前、メーカー) にまたがるキーワードを検索したいと考えています。したがって、たとえば、「myproduct」という製品が「somemanufacturer」を作成した場合、「myproduct」、「somemanufacturer」、または「myproduct somemanufacturer」のいずれかを検索すると、これらの用語が含まれているため、この結果が表示されることが期待されます。名前またはメーカーのフィールドで。
私の問題は次のとおりです。
@products = Product.search query
上記のすべての検索用語を許可し、期待される結果を返しますが、追加するとすぐに
@products = Product.search query, fields: [:name, :manufacturer_name]
「myproduct」または「somecompany」の結果のみが返されますが、「myproduct somecompany」は返されません。
fields オプションを完全に削除できるので、これは大したことではありませんが、name フィールドに searchkicks word_start を利用する必要があります。したがって、私の最後のクエリは次のようなものです。
@products = Product.search query, fields: [{name: :word_start}, :manufacturer_name]
ユーザーが製品の最初の文字列を検索し、メーカーも入力できるようにしたいと思います。たとえば、「myprod somecompany」と入力すると、somecompany によって作成された myproduct という名前の製品が返されることを望んでいましたが、残念ながらこれは結果を返しません。
ここで本当に明白な何かが欠けていますか? 私は追加を変更することができます
operator: 'or'
しかし、実際には名前の一部を検索し、追加の用語を追加し、特定のレコードに両方が存在する場合は返されるようにしたいと考えています。
ここに私のモデルコードもあります
class Product < ActiveRecord::Base
searchkick word_start: [:name]
end
ありがとう