elasticsearch,Search,elasticsearch" /> elasticsearch,Search,elasticsearch" />

ElasticSearch更像此API和嵌套对象属性

ElasticSearch更像此API和嵌套对象属性,search,elasticsearch,Search,elasticsearch,我对ES相当陌生,所以如果这是一个我还没有发现的常见场景,请原谅我 我有一个包含文档的索引,每个文档都可以与特定事件相关,因此在每个文档中都有一个嵌套的事件对象。事件->文档是一对多关系 当我显示单个文档时,我希望显示“更像这样”,其中“更像这样”实际上表示来自同一会议、同一作者或同一主题的更多文档。 作者和主题工作正常,但尽管mlt_字段接受“event.title”作为字段名,但它从未找到来自同一事件的任何文档 我的映射: { "myindex": { "mappings"

我对ES相当陌生,所以如果这是一个我还没有发现的常见场景,请原谅我

我有一个包含文档的索引,每个文档都可以与特定事件相关,因此在每个文档中都有一个嵌套的事件对象。事件->文档是一对多关系

当我显示单个文档时,我希望显示“更像这样”,其中“更像这样”实际上表示来自同一会议、同一作者或同一主题的更多文档。 作者和主题工作正常,但尽管mlt_字段接受“event.title”作为字段名,但它从未找到来自同一事件的任何文档

我的映射:

{
   "myindex": {
      "mappings": {
         "myitem": {
            "properties": {
               "authors": {
                  "type": "string",
                  "analyzer": "keyword"
               },
               "id": {
                  "type": "integer"
               },
               "title": {
                  "type": "string"
               },
               "topics": {
                  "type": "string",
                  "analyzer": "keyword"
               },
               "event": {
                  "type": "nested",
                  "properties": {
                     "title": {
                        "type": "string",
                        "analyzer": "keyword"
                     },
                     ...
                  }
               }
            }
         }
      }
   }
}
我的问题是:

GET /myindex/mydoc/7/_mlt?mlt_fields=event.title&min_doc_freq=1&min_term_freq=1&percent_terms_to_match=0
{
  "from": 0,
  "size": 5
}
我的结果:

{
   ...
   "hits": {
      "total": 0,
      "max_score": null,
      "hits": []
   }
}

我怀疑这是一个嵌套问题,那么我是否必须创建一个嵌套的过滤查询,并使用“event=my_event”或更类似于“author OR topic”?还是我遗漏了一些非常愚蠢的东西?

是的,您必须执行嵌套查询来查询嵌套字段:

因为嵌套文档总是被父文档屏蔽,所以在嵌套查询的范围之外永远无法访问嵌套文档


感谢您确认需要嵌套。那么,我如何发出一个调用,用嵌套查询和“更像这样”来过滤我的结果呢?或者是“更像这样不支持嵌套对象,所以如果你需要在嵌套对象字段上使用它,就不要使用它”有类似的问题,你是如何解决的?放弃了使用“更像这样”的想法,只是做了一个单独的查询,将当前文档从结果中排除。这就是我害怕的,该死的。。。我让所有的东西都使用非嵌套的,为了更好的性能和索引,我把它们移到了嵌套中……真是遗憾。除了有一个单独的文档之外,你还可以将属性添加到
事件
字段来“展平”嵌套的数据。