我将 elasticsearch-model gem 用于具有has_many
关系的模型。为了匹配文档,假设模型是Article
并且关系是has_many categories
。所以我按如下方式编写了客户序列化程序(直接来自文档):
def as_indexed_json(options={})
self.as_json(
include: { categories: { only: :title},
})
end
序列化似乎有效。示例文章的 as_indexed_json 的结果包含一个"categories" => {"title"=> "one", "title"=> "two", "title"=> "three"}
块。
我正在苦苦挣扎并且无法在文档中找到的是如何搜索这个嵌套字段。
这是我尝试过的:
从嵌套查询的弹性搜索文档中,我认为它应该如下所示:
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'}}
返回结果,但当然我只想在类别字段中搜索“一个”。
任何帮助将非常感激!