这是我第一次使用Elastica并查询ElasticSearch的数据
对我来说,作为首发,我有一个问题,如何使用Elastica查询下面的代码?:
curl 'http://localhost:9200/myindex/_search?pretty=true' -d '{
"query" : {
"term": {
"click": "true"
} }, "facets" : {
"matches" : {
"terms" : {
"field" : "pubid",
"all_terms" : true,
"size": 200
}
}
}
}'
希望有人能借给我一臂之力。
谢谢,
答案 0 :(得分:8)
这应该做:
// Create a "global" query
$query = new Elastica_Query;
// Create the term query
$term = new Elastica_Query_Term;
$term->setTerm('click', 'true');
// Add term query to "global" query
$query->setQuery($term);
// Create the facet
$facet = new Elastica_Facet_Terms('matches');
$facet->setField('pubid')
->setAllTerms(true)
->setSize(200);
// Add facet to "global" query
$query->addFacet($facet);
// Output query
echo json_encode($query->toArray());
要运行查询,您需要连接到ES服务器
// Connect to your ES servers
$client = new Elastica_Client(array(
'servers' => array(
array('host' => 'localhost', 'port' => 9200),
array('host' => 'localhost', 'port' => 9201),
array('host' => 'localhost', 'port' => 9202),
array('host' => 'localhost', 'port' => 9203),
array('host' => 'localhost', 'port' => 9204),
),
));
并指定要针对
运行查询的索引和类型// Get index
$index = $client->getIndex('myindex');
$type = $index->getType('typename');
现在您可以运行查询
$type->search($query);
修改强>: 如果您使用的是命名空间环境和当前版本的Elastica,请相应地更改创建新对象的所有行
$query = new \Elastica\Query;
$facet = new \Elastica\Facet\Terms
等等
答案 1 :(得分:1)
你也可以像这样查询: (感谢http://tech.vg.no/2012/07/03/using-elastica-to-query-elasticsearch/的优秀文章)
<?php
$query = new Elastica_Query_Builder('{
"query" : {
"term": {
"click": "true"
}
},
"facets" : {
"matches" : {
"terms" : {
"field" : "pubid",
"all_terms" : true,
"size": 200
}
}
}
}');
// Create a raw query since the query above can't be passed directly to the search method used below
$query = new Elastica_Query($query->toArray());
// Create the search object and inject the client
$search = new Elastica_Search(new Elastica_Client());
// Configure and execute the search
$resultSet = $search->addIndex('blog')
->addType('posts')
->search($query);
// Loop through the results
foreach ($resultSet as $hit) {
// ...
}