Searchkick возвращает только определенные значения, а не все

При использовании searchkick для выполнения поиска я получаю в результате все поля. Я хотел бы ограничить ответ выводом только определенных полей, таких как title.

# movie.rb
class Movie < ApplicationRecord
  searchkick autocomplete: ['title']
end

# search_controller.rb
def autocomplete
  render json: Movie.search(params[:query], autocomplete: true, limit: 10, fields: [:title])
end

Мой ответ все еще

[{"id":1,"title":"Megamind","director":"Tom McGrath","genre":"Animation | Action | Comedy","description":"The supervillain Megamind finally defeats his nemesis, the superhero Metro Man. But without a hero, he loses all purpose and must find new meaning to his life.","length":95,"year":2010,"imdb_id":"tt1001526","imdb_rating":"7.3","created_at":"2016-04-16T19:50:24.893Z","updated_at":"2016-04-16T19:50:24.893Z"}]

Я пытаюсь только вернуть титул. Читая различные вопросы, я предположил, что это должно быть связано с fields в моем поиске, но это не меняет ответ. Я также пытался использовать атрибут _source, но безуспешно.


person MMachinegun    schedule 20.04.2016    source источник
comment
Я упускаю что-то очевидное?   -  person MMachinegun    schedule 20.04.2016


Ответы (3)


Вы можете использовать:

select_v2: ["title"], load: false
person Andrew Kane    schedule 21.04.2016
comment
Спасибо за ваш ответ! К сожалению, если я использую Movie.search(params[:query], autocomplete: true, limit: 10, fields: [:title], select: ["title"]), я все равно получаю все обратно. Или я должен разместить select: ["title"] в другом месте? - person MMachinegun; 21.04.2016
comment
Какая у вас версия Searchkick? - person Andrew Kane; 23.04.2016
comment
Версия 1.2.1. Так что в основном новейшее - person MMachinegun; 24.04.2016
comment
Попробуйте с load: false. - person Andrew Kane; 02.07.2016
comment
load: false работает :). Благодарность! Теперь он отправляет обратно только title с этими дополнительными полями, index, type, id, score. - person MMachinegun; 05.07.2016
comment
только странно то, что он возвращает "title":["Avatar"] в виде массива. но это нормально в конце концов - person MMachinegun; 05.07.2016
comment
Используйте select_v2: ["title"], чтобы исправить проблему с массивом. - person Andrew Kane; 07.07.2016
comment
Есть ли способ исключить несколько полей? Если у меня большой список полей, и я просто хочу исключить несколько. - person remonses; 07.05.2021

для версии Elasticsearch 5.6.3 и версии searchkick gem 2.1.1 это работает: select: ["languages", "categories", "level", "id"], load: false для возврата только этих полей

person Nishant Kumar    schedule 22.06.2020

В общем, я нашел способ обойти это. Поскольку я возвращаю все поля в свой ответ, я просто фильтрую их перед отправкой клиенту:

search = Movie.search(params[:query], autocomplete: true, limit: 10, fields: [:title])
search = search.results.map do |m|
  { title: m.title }
end

render json: search

Мой запрос возвращает все значения, но я просто отправляю обратно те, которые хочу. Было бы лучше, если бы запрос просто возвращал нужные мне поля, но пока это работает как решение :)

person MMachinegun    schedule 20.04.2016