8

我刚开始使用弹性搜索。我想在 php 中使用 cURL 进行查询。

此代码没有给出任何内容...(如果我从命令行执行,请参阅下面的错误。我不确定此错误是由控制台中的换行符引起的...)

$url = "curl -s -XGET http://<my_url>:9200/idx_occurrence/Occurrence/_search -d '
{
'filtered' : {
    'query' : {
        'term' : { 'kingdom_interpreted' : 'Plantae' }
    }
}

}' ";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_HEADER, 0);

$return=curl_exec($ch);

var_dump($return);

但如果我使用这个网址http://<my_url>:9200/idx_occurrence/Occurrence/_search?q=kingdom_interpreted:Plantae

然后我从 cURL 得到结果。

也许查询过滤器不正确?(我尝试了几个选项都没有成功)

解析失败[没有元素解析器[过滤]]];}]","状态":500}

4

4 回答 4

6

我一直在使用 Elastica PHP 库进行弹性搜索交互:

https://github.com/ruflin/Elastica

它的学习曲线非常短。这是一个例子:

$client = new Elastica_Client();
$index = $client->getIndex('idx_occurrence');
$index->getType('Occurrence');

$query_string = new Elastica_Query_QueryString('Plantae');
$query_string->setFields(array('kingdom_interpreted'));    
$query = new Elastica_Query($query_string);

$index->refresh();
$searchResults = $index->search($query);

这说明了仅限于特定字段的查询字符串搜索。$searchResults是一个Elastica_ResultSet对象数组。我喜欢 Elastica,因为它可以抽象出任何与 cURL 相关的问题。

于 2012-08-24T15:25:41.127 回答
4

这是一个简单的请求演示:

    $param = "
        {
        'filtered' : {
            'query' : {
                'term' : { 'kingdom_interpreted' : 'Plantae' }
            }
        }

        }";
    $header = array(
        "content-type: application/x-www-form-urlencoded; charset=UTF-8"
    );

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, "http://xxxxx:9200/idx_occurrence/Occurrence/_search");
    curl_setopt($curl,CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
    $res = curl_exec($curl);
    curl_close($curl);
    return $res;
于 2017-03-22T06:39:35.220 回答
1

我自己找到了部分问题的答案。我设法通过命令行得到它。

curl -XGET my_server:9200/idx_occurrence/Occurrence/_search?pretty=true -d '{ "query": { "query_string" :{"fields" : ["kingdom_interpreted"], "query": "Plantae" } } }'

使用 PHP 执行(正确的)cURL 请求只是发回一个空字符串。PHP 日志中没有错误。

$url='curl -XGET http://<my_url>:9200/idx_occurrence/Occurrence/_search?pretty=true
 -d   \'{ "query": { "query_string" :{ "fields" : ["kingdom_interpreted"], 
"query": "Plantae" } } }\'';

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

同样,如果不是这个 $url 我发送这个 url my_url:9200/idx_occurrence/Occurrence/_search?q=kingdom_interpreted:Plantae

有用。为什么?

于 2012-07-25T13:23:34.200 回答
0
$search = 'Plantae'; //search query
$fields = 'kingdom_interpreted'; //fields to look in
$results = file_get_contents('http://server:port/idx_occurrence/Occurrence/_search?q='.$search.'&fields='.$fields);
于 2016-09-27T12:27:57.040 回答