Elasticsearch在php中添加脚本过滤器


Elasticsearch add script filter into URL in php

我有问题的Elasticsearch脚本过滤器和Curl post URI。

我使用URL传递值,如下所示

我的URL带参数

   $params = rawurlencode('firstName:John');
    $url= 'http://localhost:9200/jdbc/_search?q='.$params.'&pretty=true';

My Json code:

    $options='{
    "query": {
     "filtered": {
      "filter": {
        "script": {
          "script": "(min..max).contains(doc.admitted_date.date.year)",
          "params": {
            "min": 1999,
            "max": 2000
          }
        }
      }
    }
  },
  "aggs": {
    "citycount": {
      "cardinality": {
        "field": "cityid",
        "precision_threshold": 100
      }
    }
  }
}';

旋度传递:

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$options);
    ob_start();
    curl_exec ($ch);
    curl_close ($ch);
    $data = ob_get_contents();
    ob_end_clean();

当我通过上面的查询时,它显示错误的结果。因为我们用URL和JSON两种格式传递参数。有一次它只从URL获取参数。有没有办法同时传递两个参数,或者有没有别的方法传递这个?在Elasticsearch PHP

中是否有任何方法可以在URL中传递脚本?

正确的方法是在查询中传递所有内容,包括firstName字段上的匹配:

$options='{
  "query": {
    "filtered": {
      "query": {
        "query_string": {
          "query": "firstName:John"
        }
      },
      "filter": {
        "script": {
          "script": "(min..max).contains(doc.admitted_date.date.year)",
          "params": {
            "min": 1999,
            "max": 2000
          }
        }
      }
    }
  },
  "aggs": {
    "citycount": {
      "cardinality": {
        "field": "cityid",
        "precision_threshold": 100
      }
    }
  }
}';
$url= 'http://localhost:9200/jdbc/_search?pretty=true';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);             <---- also add this
curl_setopt($ch, CURLOPT_POSTFIELDS, $options);
ob_start();
curl_exec ($ch);
curl_close ($ch);
$data = ob_get_contents();
ob_end_clean();