如果是elasticsearch查询构造中的else语句

问题描述 投票:0回答:1

我正在使用elasticsearch php并试图在一个地方优化我的查询收缩。典型的Elasticsearch查询如:

$params = [
    'index' => 'my_index',
    'type' => 'my_type',
    'body' => [
        'query' => [
            'bool' => [
                'must' => [
                    [ 'match' => [ 'testField' => 'abc' ] ],
                    [ 'match' => [ 'testField2' => 'xyz' ] ],
                ]
            ]
        ]
    ]
];

所以问题是,是否有可能在'match'字符串之前将条件查询放入$ params中:

<?php if (isset($_GET['query'])) [ 'match' => [ 'testField' => 'abc' ] ]; ?>

谢谢你的任何建议

php elasticsearch
1个回答
1
投票

你可以用这个:

 <?php
 $must = [[ 'match' => [ 'testField2' => 'xyz' ] ] ];
 if (isset($_GET['query']))
     $must[] = [ 'match' => [ 'testField' => 'abc' ] ];

 $params = [
     'index' => 'my_index',
     'type' => 'my_type',
     'body' => [
         'query' => [
             'bool' => [
                 'must' => $must
             ]
         ]
    ]
 ];

或这个;

 <?php
 $params = [
     'index' => 'my_index',
     'type' => 'my_type',
     'body' => [
         'query' => [
             'bool' => [
                 'must' => [
                      [ 'match' => [ 'testField2' => 'xyz' ] ],
                 ],
             ]
         ]
    ]
 ];

 if (isset($_GET['query']))
     $params['body']['query']['bool']['must'][] = [ 'match' => [ 'testField' => 'abc' ] ];
© www.soinside.com 2019 - 2024. All rights reserved.