1

我目前在与这些文档相关的弹性搜索(文档)和孩子(评论)中索引了父母。我的第一个目标是根据子查询搜索包含 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
                    }
                }
            }
        }
    }
}

我使用 score 来计算文档的评论数量,然后使用“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 过滤每个子查询。

这个问题有什么解决办法吗?

4

1 回答 1

3

根本没有与过滤器相关的分数。我建议将整个逻辑移动到查询部分并使用布尔查询将不同的查询组合在一起。

于 2013-10-18T08:46:15.437 回答