Я использую жемчужину модели elasticsearch для модели с отношением has_many
. Чтобы соответствовать документации, предположим, что модель равна Article
, а отношение равно has_many categories
. Поэтому я написал сериализатор клиента следующим образом (непосредственно из документации):rails elasticsearch ищет вложенное поле json
def as_indexed_json(options={})
self.as_json(
include: { categories: { only: :title},
})
end
Сериализация, похоже, сработает. Результат примера. В статье as_indexed_json содержится блок "categories" => {"title"=> "one", "title"=> "two", "title"=> "three"}
.
То, с чем я борюсь, и не смог найти в документации, - это поиск этого вложенного поля.
Вот что я пробовал:
От elasticsearch documentation on nested query я полагал, что это должно выглядеть следующим образом:
r = Article.search query: {
nested: {
path: "categories",
query: {match: {title: "one"}}
}
}
но когда я r.results.first
я получаю сообщение об ошибке: nested object under path [categories] is not of nested type]
...
Я попытался добавить одну строчку в сериализаторе: include: { categories: { type: "nested", only: :title}
, но это ничего не меняет, он все еще говорит, что категории не имеют вложенного типа.
Конечно, я пытался просто запрашивая поле без вложенности тоже так:
r = Article.search query: {match: {categories: 'one'}}
Но это просто не возвращает никаких результатов.
полнотекстового поиска, как это:
r = Article.search query: {match: {_all: 'one'}}
Возвращает результаты, но, конечно, я только хочу, чтобы искать «один» в поле категорий.
Любая помощь была бы высоко оценена!