ElasticSearch更像此API和嵌套对象属性
我对ES相当陌生,所以如果这是一个我还没有发现的常见场景,请原谅我 我有一个包含文档的索引,每个文档都可以与特定事件相关,因此在每个文档中都有一个嵌套的事件对象。事件->文档是一对多关系 当我显示单个文档时,我希望显示“更像这样”,其中“更像这样”实际上表示来自同一会议、同一作者或同一主题的更多文档。 作者和主题工作正常,但尽管mlt_字段接受“event.title”作为字段名,但它从未找到来自同一事件的任何文档 我的映射:ElasticSearch更像此API和嵌套对象属性,search,elasticsearch,Search,elasticsearch,我对ES相当陌生,所以如果这是一个我还没有发现的常见场景,请原谅我 我有一个包含文档的索引,每个文档都可以与特定事件相关,因此在每个文档中都有一个嵌套的事件对象。事件->文档是一对多关系 当我显示单个文档时,我希望显示“更像这样”,其中“更像这样”实际上表示来自同一会议、同一作者或同一主题的更多文档。 作者和主题工作正常,但尽管mlt_字段接受“event.title”作为字段名,但它从未找到来自同一事件的任何文档 我的映射: { "myindex": { "mappings"
{
"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”?还是我遗漏了一些非常愚蠢的东西?是的,您必须执行嵌套查询来查询嵌套字段: 因为嵌套文档总是被父文档屏蔽,所以在嵌套查询的范围之外永远无法访问嵌套文档
感谢您确认需要嵌套。那么,我如何发出一个调用,用嵌套查询和“更像这样”来过滤我的结果呢?或者是“更像这样不支持嵌套对象,所以如果你需要在嵌套对象字段上使用它,就不要使用它”有类似的问题,你是如何解决的?放弃了使用“更像这样”的想法,只是做了一个单独的查询,将当前文档从结果中排除。这就是我害怕的,该死的。。。我让所有的东西都使用非嵌套的,为了更好的性能和索引,我把它们移到了嵌套中……真是遗憾。除了有一个单独的文档之外,你还可以将属性添加到
事件
字段来“展平”嵌套的数据。