簡體   English   中英

如何使用php客戶端創建elasticsearch bool查詢

[英]How to create an elasticsearch bool query with php client

我需要運行一個ES bool查詢,看起來像這樣

{
  "aggs": {
    "column1": {
      "terms": {
        "field": "column1.raw",
        "size": 5
      }
    }
  },
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "range": {
                "time": {
                  "gt": "2015-02-19 00:00:00",
                  "lt": "2015-02-20 00:00:00"
                }
              }
            }
          ],
          "should": [
            {
              "term": {
                "column1.raw": "value1"
              }
            },
            {
              "term": {
                "column1.raw": "value2"
              }
            }
          ]
        }
      }
    }
  }
}

我已經完成了應該做的事情,現在需要制定條款部分。 由於它具有多次相同的索引值,我該如何為它制定數組?

我現在使用以下PHP代碼:

        foreach ($terms as $term) {
            $termFIlter = array(
                "term" => array(
                    "column1.raw" => $term
                )
            );
        }

        $options['body']['query'] = array(
            "filtered" => array(
                "filter" => array(
                    "bool" => array(
                        "must" => array(
                            "range" => array(
                                "time" => array(
                                    "gt" => $start,
                                    "lt" => $end
                                )
                            )
                        ),
                        "should" => $termFIlter
                    )
                )
            )
        );

以此示例為例,請更改字段名稱。設置您​​正在使用的字段。

$options = array(
   'fields' => array('title', 'content', 'profile_id', 'type', 'name', 'description', 'date', 'url'),
   'from' => 0,
   'size' => 10,
   'query' => array(
      ($type ?
          array(
              'bool' => array(
                  'must' => array(
                      array('term' => array('_all' => $term)),
                      array('term' => array('type' => $type))
                   )
              )
          ) :
            array('match' => array('_all' => $term))
    )
  )
);

elasticsearch php客戶端文檔中,這是你需要放置匹配的多個索引值的方法:

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

所以我認為對你的查詢來說是相同的但是有了術語。 就像你在編輯中展示的那樣或者像這樣:

        $options['body']['query'] = array(
        "filtered" => array(
            "filter" => array(
                "bool" => array(
                    "must" => array(
                        "range" => array(
                            "time" => array(
                                "gt" => $start,
                                "lt" => $end
                            )
                        )
                    ),
                    "should" => [
                        [
                            "term" => [
                                "column1.raw" => "value1"
                            ]
                        ],
                         [
                            "term" => [
                                "column1.raw" => "value2"
                            ]
                        ]    
                    ]
                )
            )
        )
    );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM