【问题标题】:Elasticsearch add script filter into URL in phpElasticsearch将脚本过滤器添加到php中的URL
【发布时间】:2015-10-15 18:59:55
【问题描述】:

我在使用 Elasticsearch 脚本过滤器和 Curl post URI 时遇到问题。

我正在使用如下 URL 传递值

我的带参数的网址

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

我的 Json 代码:

    $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 中传递脚本

【问题讨论】:

    标签: php curl elasticsearch


    【解决方案1】:

    这样做的正确方法是传递查询中的所有内容,包括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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-04
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 2017-02-24
      相关资源
      最近更新 更多