elasticsearch--php检索

原创 2015年11月19日 11:48:19

在搭好ES的环境之后,就可以使用他来检索了。这个时候是默认已经装好elasticsearch-php的扩展了。

require_once ('../vendor/autoload.php') ;

use \ElasticSearch\Client;

在用之前首先要做好准备↑。

和其他的检索一样,首先就是要创建连接。

$es = Client::connection(array(
    'servers' => '127.0.0.1:9200',
    'protocol' => 'http',
    'index' => 'ht_email_index',
    'type' => 'Email'
));

service是es服务器的地址然后协议、索引名。type,相当于选数据库和表。

接下来构造检索条件。

es的检索条件可以用数组来表示。

$query = array();
if (!empty($subject)) {
  $query[]= array('match' => array('subject' => $subject));
}
if (!empty($cc)) {
  $query[] = array('match' => array('cc_user' => $cc));
}

如果是多条件检索,就将条件追加到$query后面。

接下来写检索语句:

 $search = array("query" =>
                array("bool" =>
                  array("must" => $query )));
因为是多条件检索,所以这里用到bool查询,must表示与。如果条件之间是或的关系,那么要用should。

在这里再说一下范围查询。

比如要查询某一时间段内的数据,那么需要对查询结果进行过滤,像这样:

$search = array("query" =>
              array("filtered" =>
                 array(
                          "query" =>
                           array("bool" =>
                            array("must" => $query )),
                          "filter" =>
                           array("range" => 
                            array("date" =>
                              array(
                                    "gt" => $date_from,
                                    "lt" => $date_to
                                  )))
              )));

用到filter、range。需要说明一点的是,像日期字段(string),要映射为"not_analyzed"才能检索出准确的结果。

因为es检索出的结果写在hits里,hits默认显示检索出的前10条结果,因此要来设置翻页来宣誓全部。

<pre name="code" class="php">$pagesize = 10; //每页显示的数据条数
$page = isset($_GET['page'])?intval($_GET['page']):1;  //获取页数信息
$offset = ($page - 1) * $pagesize; 

$params =  $search;
$params['size'] = $pagesize;
$params['from'] = $offset;
$result = $es->search($params);



构造好检索语句后,最后一句便是执行查询。

举个栗子吧,比如一检索结果是这样的:

{
   "took":      6,
   "timed_out": false,
   "_shards": { ... },
   "hits": {
      "total":      3,
      "max_score":  1,
      "hits": [
         {
            "_index":         "megacorp",
            "_type":          "employee",
            "_id":            "3",
            "_score":         1,
            "_source": {
               "first_name":  "Douglas",
               "last_name":   "Fir",
               "age":         35,
               "about":       "I like to build cabinets",
               "interests": [ "forestry" ]
            }
         },
         {
            "_index":         "megacorp",
            "_type":          "employee",
            "_id":            "1",
            "_score":         1,
            "_source": {
               "first_name":  "John",
               "last_name":   "Smith",
               "age":         25,
               "about":       "I love to go rock climbing",
               "interests": [ "sports", "music" ]
            }
         },
         {
            "_index":         "megacorp",
            "_type":          "employee",
            "_id":            "2",
            "_score":         1,
            "_source": {
               "first_name":  "Jane",
               "last_name":   "Smith",
               "age":         32,
               "about":       "I like to collect rock albums",
               "interests": [ "music" ]
            }
         }
      ]
   }
}
在检索结果中取出我们要用的。
<pre name="code" class="php">$hits   = $result["hits"]["hits"];

然后再需要什么拿什么就好了。


一个简单的php检索就是这样。其中歌颂参数都可以根据自己的需要变换,具体的请参照官方文档

或者中文权威指南





版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Elasticsearch-PHP 索引操作

索引操作 索引在客户端非常容易。因为关联数组很容易转换为JSON文档,索引文档只是提供正确和结构性的关联数组和调用方法。 单文档索引 当你索引你个文档时,可以自己提供一个ID,也可以让elasti...
  • zpf336
  • zpf336
  • 2015-11-04 17:58
  • 1191

Elasticsearch-PHP 索引操作

索引操作 本节通过客户端来介绍一下索引API的各种操作。索引操作包含任何管理索引本身(例如,创建索引,删除索引,更改映射等等)。 我们通过一些常见的操作的代码片段来介绍,然后在表格中列出剩下的方法...
  • zpf336
  • zpf336
  • 2015-11-03 19:00
  • 2497

SQL2005 高效分页

1、select top 10 * from  ( select top (@Page * 10) ROW_NUMBER() OVER (order by id) as RowNum, id, use...

mysql查询连续时间数据——无数据补0

用D3来画统计图,数据是从mysql数据库中查出来的。 统计图是关于某段时间内,每年/每月/每周的微博数量的折线图。数据表是一条微博为一条记录,每条记录有日期这个字段。 首先考虑用group by来统...

Elasticsearch简单入门及应用

来源: 多年前,一个叫做Shay Banon的刚结婚不久的失业开发者,由于妻子要去伦敦学习厨师,他便跟着也去了。在他找工作的过程中,为了给妻子构建一个食谱的搜索引擎,他开始构建一个早期版本的Lucen...

web登陆过程总结

学前端这么久,登陆过程也简单的练过(完全凭借自己的想象,然后成功了) 上周抽时间在网络上学习了一下别人事如何做的。我觉得人家做的最好的一点就是函数的封装。这样就省去了很多重复的代码,以后用到类似的功能...

elasticsearch索引(多字段类型字段—字段可检索可聚合)

事情是这样的。 之前做了mongoDB 的检索,做好交给师兄看了之后,师兄说,恩,可以。接下来把他换成用elasticsearch检索。 当时我的内心是崩溃的。敢情MongoDB就是用来练手的啊!ES...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)