2017-01-01 45 views
0

我正在嘗試將Elasticsearch與PHP客戶端結合使用。但是,當我構造一個簡單的查詢時,它會給出與完全相同的索引結果,而不是我認爲通過Curl或Python進行的等效查詢的結果。也就是說,結果與查詢完全無關 - 看起來像是隨機的數據塊。不管我發送的參數(姓氏)的值如何,它也返回相同的結果。這裏是PHP代碼:Elasticsearch - 與不同客戶端的不同結果

<?php 
require 'vendor/autoload.php'; 

use Elasticsearch\ClientBuilder; 

$client = ClientBuilder::create()->build(); 

$params = [ 
    'index' => 'directory', 
    'body' => [ 
     'query' => [ 
      'match' => [ 
       'last_name' => 'ely' 
       ] 
     ] 
    ] 
]; 
$response = @$client->search($params); 
print_r($response); 
?> 

這裏是捲曲等同,返回準確的結果:

http://localhost:9200/directory/_search?q=last_name:ely 

在此先感謝您的任何建議!

+0

您能刪除$ client-> search前的@嗎?你可能有一些被掩蓋的錯誤。 – nikoshr

+0

我的歉意,我遺漏了錯誤的一塊。客戶端 - >搜索調用確實會給出這個錯誤:'警告:json_encode()期望參數2很長,字符串在/ Library/WebServer/Documents/es/vendor/elasticsearch/elasticsearch/src/Elasticsearch/Serializers/SmartSerializer中給出。 30線上的php' – Tiggyboo

回答

0

你得到這個錯誤來自this lineSmartSerializer.php

$data = json_encode($data, JSON_PRESERVE_ZERO_FRACTION); 

你可以看到,第二個參數JSON_PRESERVE_ZERO_FRACTIONthis commit增加了,這也requires PHP version 5.6.6

所以,問題來自於一個事實您使用的是最新版本的elasticsearch-php,它需要PHP 5.6.6,但是您的PHP版本低於此版本,因此您的PHP版本中不存在JSON_PRESERVE_ZERO_FRACTION

+0

非常感謝 - 我升級到7.1,問題確實消失了! – Tiggyboo

+0

很酷,很高興它幫助! – Val

+0

會很高興,但我沒有看到這個選項...會捅一下。 – Tiggyboo

相關問題