2014-11-12 2 views
4

Я индексировать некоторые из моих данных с searchkick (https://github.com/ankane/searchkick) как массив и работает почти нормально :)Searchkick без вытекающих

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

поле Я заинтересован в это авторы. Я хотел бы выполнить поиск «Мариас» и найти всех авторов, которые на самом деле имеют такую ​​точную строку в своей фамилии, как (Хавьер Мариас), и не все Марии/Марио/Марэ, которые возвращают Searchkick, и имеют их с гораздо большим приоритетом.

Это, как я ищу прямо сейчас

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

Возможно ли это вообще? TIA

ответ

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} 
)