如何从“Elastica ResultSet”对象获取结果

时间:2012-03-06 15:40:05

标签: php object elasticsearch

我正在为ElasticSearch使用“elastica”php客户端。

我对OO编程有点新,特别是在php中。

但是,我设法使用elastica php客户端搜索我的elasticsearch服务器并将响应存储在“Elastica_ResultSet”对象中。我没有运气访问该对象的内容。

我希望能够列出结果总数,找到结果的弹性搜索记录ID,并获得该结果的弹性搜索记录的完整内容。

Elastica类引用可以在http://ruflin.github.com/Elastica/api/index.html找到,虽然我不知道如何处理它。

这是我用来实现这个目标的PHP代码:

<?php
function __autoload_elastica ($class) {
    $path = str_replace('_', '/', $class);

    if (file_exists('extentions/' . $path . '.php')) {
        require_once('extentions/' . $path . '.php');
        //echo "$path EXISTS!!!";
    }
}
spl_autoload_register('__autoload_elastica');

// New ES Client
$client = new Elastica_Client();

// Set Index
$index = $client->getIndex('test1');

// Set Document Type
$type = $index->getType('user');

// Perform Search
$resultSet = $index->search('halo');
?>

2 个答案:

答案 0 :(得分:3)

所以基本上你可以使用var_export输出你的结果集

但一般情况下,elastica搜索会返回一个Elastica_ResultSet对象,该对象有几个可以使用的属性,如count,totalHits facets等。

并且还包含一个Elastica_Result对象数组,可以通过调用Elastica_ResultSet getResults()方法或使用current()和next()方法或仅使用php foreach函数来访问它们

Elastica_Result结果的数据,也有几种方法可供使用。 getId(),getVersion(),getData()等等。

// Set Document Type
$type = $index->getType('user');

// Perform Search
$resultSet = $index->search('halo');

// Get IDs
$resultIDs = array();
foreach($resultSet as $result){
    $resultIDs[] = $result->getId();
}

我想告诉你一些对我来说有点困难的事情。 查询和结果排序

// Set the query terms for your search
$queryTerm = new Elastica_Query_Terms();
$queryTerm->setTerms('user', array("test", "test1"));

// Create the sorting array
$sort = array("user" => array("order" => "desc"));

// Create the query
$query = Elastica_Query::create($queryTerm);

// Set the sorting to the query
$query->setSort($sort);

// Perform the search
$resultSet = $index->search($query);

希望这有帮助

答案 1 :(得分:2)

经过几个月的OO练习后,似乎执行一个简单的var_dump($ resultSet)会为我提供返回对象的结构和内容......不能相信没有人对这样的基本提出任何建议问题;)