4

我正在使用 searchkick ( https://github.com/ankane/searchkick ) 作为数组索引我的一些数据,它几乎可以正常工作:)

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

我感兴趣的领域是authors。我想要完成的是搜索“Marias”并找到所有实际上在他们的姓氏中具有确切字符串的作者,例如(Javier Marias),而不是 Searchkick 返回的所有 Maria/Mario/Marais,并将它们与一个更大的优先事项。

这就是我现在搜索的方式

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

这可能吗?TIA

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 回答