6

どなたか、次のことについてアドバイスをいただけないでしょうか。

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

ありがとう

4

2 に答える 2