2012-03-06 134 views
0

我对ElasticSearch使用“elastica”php客户端。如何从“Elastica_ResultSet”对象获得结果

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

不过,我已成功使用弹性弯曲PHP客户端搜索我elasticsearch服务器和存储在一个“Elastica_ResultSet”对象的响应。无论如何,我都无法访问该对象的内容。

我希望能够列出结果的总数,发现结果的elasticsearch记录ID,并得到该结果的elasticsearch记录的全部内容。

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

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

+0

使用的var_dump时是要确保你有你的开发环境配置XDebug的另一个秘诀。它将窝和语法突出你的var_dump()调用,使他们更容易阅读。 – 2013-10-04 15:27:41

2

所以basicaly可以使用var_export输出你的结果集

但在一般的弹性弯曲搜索返回一个弹性_ResultSet对象有几个属性,你可以使用count,totalHits facets等等。

并拥有简单地使用PHP的foreach功能

的Elastica_Result对象的数组这些可以访问通过调用Elastica_ResultSet getResults()方法或通过使用当前()和next()方法或通过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); 

希望这有助于的排序