Sorting elasticsearch:按匹配嵌套文档的值排序
我选择嵌套文档来实现多语言图书搜索,在文档的根目录中使用公共图书数据,在嵌套文档中使用版本数据。映射:Sorting elasticsearch:按匹配嵌套文档的值排序,sorting,elasticsearch,nested,Sorting,elasticsearch,Nested,我选择嵌套文档来实现多语言图书搜索,在文档的根目录中使用公共图书数据,在嵌套文档中使用版本数据。映射: { "book": { "properties": { "bookinfo": { ... }, "editions": { "type": "nested", "properties": { "editionid": { "type": "long",
{
"book": {
"properties": {
"bookinfo": {
...
},
"editions": {
"type": "nested",
"properties": {
"editionid": {
"type": "long",
"store": "yes",
"index": "no"
},
"title_author": {
"type": "string",
"store": "no",
"index": "analyzed"
},
"title": {
"type": "string",
"store": "yes",
"index": "not_analyzed"
},
"languageid": {
"type": "short",
"store": "yes",
"index": "no"
},
"ratings": {
"type": "integer",
"store": "no"
}
}
}
}
}
}
一本书的不同版本放在嵌套文档中——可以是不同的语言,但也可以是不同的出版商、isbn等等。有时甚至标题也与同一语言版本不同
在搜索文档时(在title_author字段中),我需要知道其他嵌套文档信息,如languageid和ratings,以根据用户的语言技能和版本的相关性提高匹配分数
我之所以不把每一个版本都放在一个单独的文档中,是因为我只希望每本书有一个命中率(最匹配的一个)。ElasticSearch也没有独特的功能。我需要分页。所以,每当我在查询了两本书后更改结果集时,ElasticSearch的分页就会中断
嵌套排序功能在这里似乎没有帮助,因为它对一本书的所有嵌套文档进行排序
如何访问匹配的嵌套文档的信息
如果无法实现,我如何通过多重搜索解决此问题?为了访问嵌套文档字段,您可以使用:
doc['editions. languageid'].value
对于增强部分,请尝试以下示例:
这就是您要找的吗?以下内容可能会有所帮助,但我不完全确定(我自己没有使用过
顶级儿童),因为顶级儿童查询只提供所有匹配儿童的聚合信息,但不是最佳匹配版本的信息。这更像是一个解决办法,但现在我这样解决了:我创建了第二个索引,只包含bookid的版本。现在,我在第一步只获取与书籍相关的信息,而不知道匹配的版本。在第二步中,我使用bookid上的过滤器和1的限制(大小)搜索editions索引,以获得每次点击的最佳匹配版本。所有需要的版本请求我都放在一个多搜索()中,速度慢了很多,但我找到了最好的版本。这似乎不适用于嵌套文档。值“sort”始终为0,无论我尝试访问哪个嵌套字段。我相信原因是,ElasticSearch不知道应该使用哪种嵌套版本。