【发布时间】:2015-03-13 17:26:49
【问题描述】:
我对 ES 还很陌生,如果这是我尚未发现的常见场景,请原谅我。
我有一个包含文档的索引,每个文档都可以与特定事件相关,因此我在每个文档中都有一个嵌套事件对象。事件 -> 文档是一对多的关系。
当我显示单个文档时,我想显示“更多类似”,其中“更多类似”实际上表示来自同一会议、同一作者或同一主题的更多文档。 Author 和 Topic 工作正常,但尽管 mlt_fields 接受“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" OR more-like-this = "author or topic" 创建一个嵌套的过滤查询?还是我只是错过了一些非常愚蠢的东西?
【问题讨论】:
-
遇到了类似的问题,你是怎么解决的?
-
放弃了使用“more-like-this”的想法,只是做了一个单独的查询,从结果中排除了当前文档。
-
这就是我所害怕的,该死的......我让所有东西都使用非嵌套,为了更好的性能和索引而移动到嵌套......真是遗憾。
-
您可以将
include_in_parent: true属性添加到event字段,以“展平”嵌套数据,同时拥有单独的文档。
标签: search elasticsearch