4

searchkick ( https://github.com/ankane/searchkick ) を配列として使用してデータの一部にインデックスを付けていますが、ほとんど問題なく動作します:)

def search_data
  {isbn: isbn, 
   title: title, 
   abstract_long: abstract_long,
   authors: authors.map(&:name)}
end

私が興味を持っている分野は、著者です。私が達成したいのは、「Marias」を検索し、Searchkick が返すすべての Maria/Mario/Marais ではなく、(Javier Marias) のような姓に実際にその正確な文字列を含むすべての著者を見つけて、それらを持っていることです。はるかに大きな優先順位。

これが私が今探している方法です

Book.search(@search_key,
            fields: [:authors, :title, {isbn: :exact}],
            boost_by: {authors: 10, title: 5, isbn: 1})

これはまったく可能ですか?ティア

4

1 に答える 1

0

Elasticsearch では、このケースに対処するための定期的な一致がありますが、Searchkick によって放棄されました。この場合、歩き回る方法を選択できます。

def search_data
  {
    isbn: isbn, 
    title: title, 
    abstract_long: abstract_long,
    author_ids: authors.map(&:id)
  }
end

検索の場合:

author_ids = Author.where(surname: 'Marias').map(&:id)
Book.search(
  @search_key,
  where: {author_ids: {in: author_ids}},
  fields: [:title, {isbn: :exact}],
  boost_by: {title: 5, isbn: 1}
)
于 2014-12-14T08:47:00.017 に答える