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简单入门及应用

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

分布式搜索引擎Elasticsearch PHP类封装 使用原生api

Elasticsearch判断index是否存在--java实现

在做Elasticsearch相关开发的时候,有个地方需要用java判断index在集群中是否存在,于是在Elasticsearch java api中找了半天,总算是找到了,记录下来,方便自己,也方...

2、es索引创建及查询

1、启动es: [root@baozi elasticsearch-1.4.4]# bin/service/elasticsearch start Starting Elasticsearch.....

PHP ElasticSearch的使用

ElasticSearch是一个基于Lucene的稳定的、分布式

[Elasticsearch] 过滤查询以及聚合(Filtering Queries and Aggregations)

本章翻译自Elasticsearch官方指南的Filtering Queries and Aggregations一章。 过滤查询以及聚合 A natural extension to a...

PHP分页+Elasticsearch查询

PHP分页+Elasticsearch查询分页,本质上就是根据给定的页码和偏移量从服务器端请求数据。原理很easy,实践起来却有诸多问题,这里总结一下目前使用的分页demo,通过es请求数据,前端自己...

Elasticsearch-PHP 概述

最近在学习使用Elasticsearch,并且是和PHP一起使用的,看到了Elasticsearch-PHP,其实是Elasticsearch为PHP提供的客户端,那么我们来学习一下API文档,如何在...
  • zpf336
  • zpf336
  • 2015年09月18日 16:41
  • 1741

Elasticsearch-PHP 快速开始

快速开始 本章节会给你一个客户端的主要功能(函数)是如何工作的快速概述。 安装 引入(包含)elasticsearch-php 在你的 composer.json...
  • zpf336
  • zpf336
  • 2015年09月18日 18:08
  • 1498

分布式搜索引擎elasticsearch PHP API index mapping操作

内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:elasticsearch--php检索
举报原因:
原因补充:

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