kueri elasticsearch tidak berfungsi pada kueri bersarang dengan php

Saya mengalami beberapa masalah dengan kueri, saya memiliki dokumen bersarang

Array
(
    [took] => 2
    [timed_out] => 
    [_shards] => Array
        (
            [total] => 5
            [successful] => 5
            [failed] => 0
        )

    [hits] => Array
        (
            [total] => 1
            [max_score] => 1
            [hits] => Array
                (
                    [0] => Array
                        (
                            [_index] => holiday
                            [_type] => holiday
                            [_id] => 31245
                            [_score] => 1
                            [_source] => Array
                                (
                                    [username] => john thomas
                                    [user] => 3
                                    [info] => test
                                    [phone] => 166872
                                    [data] => Array
                                        (
                                            [foo] => 28865
                                            [bar] => new test
                                        )

                                )

                        )

                )

        )

)

Ketika saya menjalankan kueri standar dengan perpustakaan php elasticsearch

$client = new Elasticsearch\Client();

$params['index'] = 'holiday';
$params['type']  = 'holiday';
$params['body']['query']['match']['phone'] = '166872';

$results = $client->search($params);

echo '<pre>' , print_r($results) , '</pre>';

Saya mendapatkan hasil. Tetapi ketika saya mengubah parameter kueri menjadi pencarian foo

$params['body']['query']['match']['data']['foo'] = '28865';

Saya mendapat pengecualian saat dilempar

{
  "error": "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed;
            shardFailures {[9J2ZatYTTV2Sk8LQFKFeXg][holiday][2]:
            SearchParseException[[holiday][2]: from[-1],size[-1]:
              Parse Failure [Failed to parse source [
                {
                  "query": {
                    "match": {
                      "data": {
                        "foo": "28865"
                      }
                    }
                  }
                }
              ]]];
            nested: QueryParsingException[[holiday] [match] query does not support [foo]]; }{[9J2ZatYTTV2Sk8LQFKFeXg][holiday][3]:
            SearchParseException[[holiday][3]: from[-1],size[-1]:
              Parse Failure [Failed to parse source [
                {
                  "query": {
                    "match": {
                      "data": {
                        "foo": "28865"
                      }
                    }
                  }
                }
              ]]];
            nested: QueryParsingException[[holiday] [match] query does not support [foo]]; }{[9J2ZatYTTV2Sk8LQFKFeXg][holiday][0]:
            SearchParseException[[holiday][0]: from[-1],size[-1]:
              Parse Failure [Failed to parse source [
                {
                  "query": {
                    "match": {
                      "data": {
                        "foo": "28865"
                      }
                    }
                  }
                }
              ]]];
            nested: QueryParsingException[[holiday] [match] query does not support [foo]]; }{[9J2ZatYTTV2Sk8LQFKFeXg][holiday][1]:
            SearchParseException[[holiday][1]: from[-1],size[-1]:
              Parse Failure [Failed to parse source [
                {
                  "query": {
                    "match": {
                      "data": {
                        "foo": "28865"
                      }
                    }
                  }
                }
              ]]];
            nested: QueryParsingException[[holiday] [match] query does not support [foo]]; }{[9J2ZatYTTV2Sk8LQFKFeXg][holiday][4]:
            SearchParseException[[holiday][4]: from[-1],size[-1]:
              Parse Failure [Failed to parse source [
                {
                  "query": {
                    "match": {
                      "data": {
                        "foo": "28865"
                      }
                    }
                  }
                }
              ]]];
            nested: QueryParsingException[[holiday] [match] query does not support [foo]]; }]",
  "status": 400
}

Adakah alasan mengapa kueri bersarang rusak?


person user2988129    schedule 02.09.2014    source sumber


Jawaban (1)


Jika Anda menggunakan pemetaan default, bidang data telah dipetakan secara dinamis ke tipe object (dokumentasi di sini).

Akibatnya, untuk menanyakan sub-properti object Anda, Anda harus menggunakan notasi titik seperti ini :

{
  "query": {
    "match": {
      "data.foo": "28865"
    }
  }  
}
person ThomasC    schedule 02.09.2014