ElasticSearch从0.90变为1.1

时间:2014-05-14 04:02:34

标签: php json elasticsearch

我只是稍微澄清一下,我刚刚从ElasticSearch 0.90升级到1.1.1。

我注意到的一个区别是我有一个返回json数据的字段。在0.90打电话给:

$jsondata = $hits['fields']['jsondata']

会按原样返回数据,我会使用

json_decode($jsondata)

将其转换为PHP数组。

在具有相同代码的ElasticSearch 1.1下,我看到了不同的结果

$ jsondata = $ hits ['fields'] ['jsondata']

这不是返回数据,而是将其作为数组返回,因此要访问它,我需要调用类似

的内容
json_decode($jsondata[0]);

这是弹性搜索的变化,它处理存储的json数据的方式吗?

我存储的实际json数据如下:

[{"data1":"43456435435345","data2":"tyetytbety"}]

对此有任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

这实际上是Elasticsearch 1.x中字段数据返回的正常和预期行为,并在Breaking Changes in 1.0 > Return Values中解释

  

现在,字段值响应fields参数,现在始终作为数组返回。字段可以具有单个或多个值,这意味着有时它们作为标量返回,有时作为数组返回。通过始终返回数组,这简化了用户代码。此规则的唯一例外是当字段用于检索路由值等元数据时,这些元数据始终是单数。元数据字段始终作为标量返回。

     

fields参数用于检索存储的字段,而不是用于从_source中提取的字段。这意味着它不能再用于返回整个对象,它不再接受_source.fieldname格式。对于这些,您应该使用_source _source_include和_source_exclude参数。