elasticsearch,nested,Sorting,elasticsearch,Nested" /> elasticsearch,nested,Sorting,elasticsearch,Nested" />

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不知道应该使用哪种嵌套版本。