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
                    }
                }
            }
        }
    }
}

スコアを使用してドキュメントに含まれるコメントの量を計算し、「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

フィルターに関連付けられたスコアはまったくありません。ロジック全体をクエリ部分に移動し、bool クエリを使用してさまざまなクエリを結合することをお勧めします。

于 2013-10-18T08:46:15.437 に答える