我目前的父母在弹性搜索(文件)和与这些文件相关的子(评论)中编入索引。 我的第一个目标是根据子查询搜索超过N条评论的文档。我是这样做的:
documents/document/_search
{
"min_score": 0,
"query": {
"has_child" : {
"type" : "comment",
"score_type" : "sum",
"boost": 1,
"query" : {
"range": {
"date": {
"lte": 20130204,
"gte": 20130201,
"boost": 1
}
}
}
}
}
}
我使用分数来计算文档的评论量,然后使用“min_score”按文件过滤文档。 现在,我的目标是不仅搜索评论,还搜索与文档相关的其他几个子文档,始终基于频率。类似于下面的查询:
documents/document/_search
{
"query": {
"match_all": {
}
},
"filter" : {
"and" : [{
"query": {
"has_child" : {
"type" : "comment",
"query" : {
"range": {
"date": {
"lte": 20130204,
"gte": 20130201
}
}
}
}
}
},
{
"or" : [
{"query": {
"has_child" : {
"type" : "comment",
"query" : {
"match": {
"text": "Finally"
}
}
}
}
},
{ "query": {
"has_child" : {
"type" : "comment",
"query" : {
"match": {
"text": "several"
}
}
}
}
}
]
}
]
}
}
上面的查询工作正常,但它不会像第一个那样基于频率进行过滤。由于在计算分数之前计算过滤器,我不能使用min_score过滤每个子查询。
这个问题的任何解决方案?