Searchkick Вложенные данные - PullRequest
0 голосов
/ 08 марта 2020

В руководстве говорится следующее (https://github.com/ankane/searchkick#nested -данные ):

Вложенные данные

Для запроса вложенных данных используйте точечная нотация.

User.search "san", fields: ["address.city"], where: {"address.zip_code" => 12345}

Это просто не работает, или приведенный пример требует дополнительной квалификации.

В моем случае у меня есть ExpenditureItem, который принадлежит_: Expenditure, так Я пытаюсь это:

ExpenditureItem.search("*", where: { "expenditure.budget_id": '2'})

, что ничего не дает. Я знаю, что в моем search_data я могу установить:

budget_id: expenditure.budget_id

, но из примера кажется, что весь смысл в том, чтобы иметь возможность выполнять быстрый и простой вложенный поиск.

Я пропустил что-то здесь?

Ответы [ 2 ]

0 голосов
/ 10 марта 2020

Ассоциации не индексируются автоматически как вложенные данные.

В вашем случае вам необходимо специально включить ассоциации, которые вы хотите проиндексировать, в ваш метод search_data.

Например, , чтобы включить все поля в вашу модель ExpenditureItem, а также ассоциацию Expenditure, вы можете сделать:

def search_data
  as_json.merge({
    expenditure: expenditure.as_json
  })
end

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

Кроме того, чтобы индексирование было более производительным, обязательно включите ассоциацию в search_import объем, например

scope :search_import, -> { includes(:expenditure) }
0 голосов
/ 09 марта 2020

Вложенные запросы могут быть выполнены только для вложенных полей, указанных как таковые в вашем отображении. Вам нужно будет переопределить индексирование по умолчанию, что эквивалентно явному определению в вашем сопоставлении ElasticSearch .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...