0

ユーザーがレポートの任意のフィールドを使用してプロファイルを検索できるレポート フィルターを作成しようとしています。例: で始まるプロファイルと、でfirstname始まるプロファイルを検索します。anngradevi

これまでに書いたクエリは次のとおりです。

{
    from: 20,
    size: 20,
    query: {
        filtered: {
            query: {
                match_all: [ ]
            },
            filter: {
                bool: {
                    must: [
                        {
                            prefix: {
                                firstname: "ann"
                            }
                        },
                        {
                            prefix: {
                                grade: "vi"
                            }
                        }
                    ]
                }
            }
       }
   },
   sort: {
       grade: {
           order: "asc"
       }
   }
}

mustboolフィルター内の)の子を1つ削除すると、機能します。ただし、複数のフィルターを使用すると結果が返されず、そこに任意の数のエントリを使用できる必要があります。

また、shouldの代わりに使用するmustと機能します。ロジックを誤解しているかどうかはわかりませんが、私の理解では (この場合)で始まる結果とで始まるmust結果のみを返す必要があります。firstnameanngradevi

それらは存在しますが、このクエリではそれらが見つかりません。

ここで何か不足していますか?

ありがとう

4

1 に答える 1

2

そのため、まだコメントを投稿できません。多少の推測でお答えします。

まず第一に、私は使用ES 0.90.2 versionしていますが、あなたのクエリは私の入力に対してうまく機能します。ただし、入力サイズとクエリを実行したプラットフォームによっては、私の答えが正しくない場合があります。

前提: インデックス内のデータ数は 20 未満です。

次の入力をインデックスに追加しました。

'{"name": "ann", "grade": "vi"}'
'{"name": "ann", "grade": "ii"}'
'{"name": "johan", "grade": "vi"}'
'{"name": "johan", "grade": "ii"}'

私のテストクエリはあなたのものと同じで、結果は次のとおりです。

"hits" : {
    "total" : 2,
    "max_score" : null,
    "hits" : [ ]          // <-- see this part is blank
  }

ご覧のとおり、ヒットはリストされていませんが、2 つのヒットがあります。これは、from:20コード セグメントが原因です。その値を変更すると、いくつかの結果が表示されます。すべての結果を表示したい場合は、その部分を削除してください。

注:そうでない場合は、お手数をおかけして申し訳ありません:(

于 2013-07-26T11:29:16.870 に答える