私は現在、エラスティック検索 (ドキュメント) でインデックス付けされた親と、これらのドキュメントに関連する子 (コメント) を持っています。私の最初の目的は、子クエリに基づいて、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 を使用して各子クエリをフィルター処理することはできません。
この問題の解決策はありますか?