【问题标题】:elasticsearch bool query error in php clientphp客户端中的elasticsearch bool查询错误
【发布时间】:2016-10-20 20:52:54
【问题描述】:

ElasticSearch 在尝试使用以下查询查找条目时返回 [_na] query malformed, no field after start_object 错误。字段 localtime 是一个新的文档字段,存在于每个文档中。

php代码,

$qryurl = '<myurl>:<myport>/index/_search?pretty';
$data = array(
"query" => array(
  "bool" => array(
    "must" => array(
      "range" => array(
        "localtime" => array(
          "from" => "2016-06-15T17:43:04.923Z",
          "to" => "2016-06-17T17:43:04.923Z",
          "include_lower" => "true",
          "include_upper" => "true"
        )
      ),
      "term" => array(
        "query" => "1.2.3.4",
        "fields" => array("ip")
      ),
      "query_string" => array(
        "query" => "*up*",
        "default_field" => array("_all")
      )
    )
  )
);

为什么会出现这个错误?


任何帮助将不胜感激!谢谢!

【问题讨论】:

  • 在“术语”中,curl 和 php_curl 之间有不一样的东西。试着把" term" =&gt; array("query" =&gt; "1.2.3.4", " fields" =&gt; array("ip")).
  • Julqas,现在打印成功,但是如何将数据解析为数组?

标签: php json elasticsearch


【解决方案1】:

您的 bool/must 子句必须是纯数组而不是关联数组:

$qryurl = '<myurl>:<myport>/index/_search?pretty';
            $data = array(
                "query" => array (
                    "bool" => array (
                      "must" => array(
                          array(
                             "range" => array ( 
                                  "localtime"  => array (
                                      "from" =>"2016-06-15T17:43:04.923Z",
                                       "to" => "2016-06-17T17:43:04.923Z",
                                       "include_lower" => "true",
                                       "include_upper" => "true"
                                  )
                             )
                          ),
                          array(
                              "term" => array(
                                  "ip" => "1.2.3.4"
                              )
                          ),
                          array(
                              "query_string" => array(
                                  "query" => "*up*",
                                  "default_field" => "_all"
                              )
                          )
                      )
                    )

        )
    );

【讨论】:

  • 错误信息:[term] 查询不支持值数组
  • 因为你错过了添加query_string,我尝试添加但是在添加这个数组('query_string' => array( 'default_field'=>"_all",'query'=> "up"))
  • 我没有错过,因为它没有出现在您的初始 PHP 代码中。现在我已经添加了它。再试一次。
  • 得到同样的错误:“[bool] 查询不支持 [1]”
猜你喜欢
  • 2015-04-29
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 2017-12-13
  • 2021-03-02
  • 2014-09-02
  • 2020-08-31
  • 2011-12-12
相关资源
最近更新 更多