elasticsearch学习笔记——安装,初步使用

前言

  久仰elasticsearch大名,近年来,fackbook,baidu等大型网站的搜索功能均开始采用elasticsearch,足见其在处理大数据和高并发搜索中的卓越性能。不少其他网站也开始将elasticsearch作为搜索功能中的一个重要选项,从招聘启事的人员技能要求上就可见一斑。elasticsearch虽然是基于java开发,但是他提供了Restful接口的形式供其他程序调用,非常的方便,对于php,python等其他语言也有对应的扩展支持。所以很有必要学习一下elasticsearch。

安装

  笔者在centos6.8环境下安装,安装的是elasticsearch-6.2.4。参考:PHP_elasticsearch搜索引擎的安装与使用 安装,但是安装后启动出现的大量error,需要搜索对应解决方案,比较麻烦,但还是都可以顺利的解决。可见一个新的程序出来总是有不少的问题,php的安装和使用就相对来说要顺畅不少。

  之后我又安装了elasticsearch-head,一个图形化查询管理elasticsearch的插件。安装过程也不是很顺畅,通过搜索解决。

初步使用

  首先需要明白的是,elasticsearch里面的一些名词和传统关系型数据库(如mysql)的对应关系,其实还都是一一对应的,换了名字,要重新记忆一下。

Relational DB -> Databases(数据库) -> Tables(表) -> Rows(行) -> Columns(列)
Elasticsearch -> Indices(索引)   -> Types(类型)  -> Documents(文档) -> Fields(字段)

  我习惯用php语言,所以使用的是elasticsearch-php6.0扩展来操作elastcsearch。它的官方文档地址,非常有用。要注意安装的elasticsearch-php版本,版本过低可能无法操作elastcsearch。

  安装完成后,就可以操作啦。下面是一个简单的例子,将数据库里面的数据读取出来,转存到elasticsearch,并且可以查询数据,还可以模糊查询数据(sql里面的like查询)。注意的是转存后需要sleep一下,否则不能立刻查询出结果。

<?php
/*
 * 简单运用elasticsearch实例,创建索引,查询数据。
 */
require_once('vendor/autoload.php');  
use Elasticsearch\ClientBuilder;  
  
  
function get_conn(){  
    $host = '127.0.0.1';  
    $dbname = 'test';  
    $user = 'root';  
    $passwd = '123456';  
  
  
    $conn = new PDO("mysql:dbname=$dbname;host=$host",$user,$passwd, array(PDO::ATTR_PERSISTENT => true)); 
    $flag = $conn->exec('set names utf8');
    return $conn;  
}  
  
  
function create_index(){  
    //Elastic search php client  
  
    $client = Elasticsearch\ClientBuilder::create()->build();  
    $sql    = "SELECT * FROM tb_voteoption";  
    $conn   = get_conn();  
    $stmt   = $conn->query($sql);  
    $rtn    = $stmt->fetchAll();  
  
  
    //delete index which already created  
    $params = array();  
    $params['index'] = 'test';  
    $client->indices()->delete($params);  
      
    //create index 
    $rtnCount = count($rtn);  
    for($i=0;$i<$rtnCount;$i++){  
        $params = array();  
        $params['body'] = array(  
            'voteOptionID'       => $rtn[$i]['voteOptionID'],  
            'voteID'   => $rtn[$i]['voteID'],  
            'voteOptionName'    => $rtn[$i]['voteOptionName'],  
            'ticketNum' => $rtn[$i]['ticketNum']  
        );  
        $params['index'] = 'test';  
        $params['type']  = 'tb_voteoption';  
          
        //Document will be indexed to test/tb_voteoption/autogenerate_id       
    var_dump($params);   
        $client->index($params);  
    }  
    echo 'create index done!';  
}  
  
  
function search(){  
    //Elastic search php client  
    $client = Elasticsearch\ClientBuilder::create()->build();  
    $params = array();  
    $params['index'] = 'test';  
    $params['type'] = 'tb_voteoption';  
    $params['body']['query']['match']['voteOptionID'] = '54';   

    $rtn = $client->search($params);  
    var_dump($rtn);  
}  

/*类似于sql里面的like查询*/
function like_search(){  
    //Elastic search php client  
    $client = Elasticsearch\ClientBuilder::create()->build();  
    $params = array();  
    $params['index'] = 'test';  
    $params['type'] = 'tb_voteoption';  
    $params['body']['query']['wildcard'] = array('voteOptionName'=>'王*');

    $rtn = $client->search($params);  
    var_dump($rtn);  
}   
set_time_limit(0);  
error_reporting(E_ALL);
ini_set('display_errors','on');
 create_index(); 
sleep(5); //建好索引后需要sleep,否则查询不出数据
search();
like_search();
?>  
View Code

里面用到的数据库数据,可以用以下sql语句创建。

DROP TABLE IF EXISTS `tb_voteoption`;
CREATE TABLE `tb_voteoption` (
  `voteOptionID` int(11) NOT NULL AUTO_INCREMENT,
  `voteID` int(11) DEFAULT NULL,
  `voteOptionName` varchar(255) CHARACTER SET gb2312 DEFAULT NULL,
  `ticketNum` int(11) DEFAULT '0',
  PRIMARY KEY (`voteOptionID`),
  KEY `voteID` (`voteID`)
) ENGINE=InnoDB AUTO_INCREMENT=55 DEFAULT CHARSET=utf8 COMMENT='投票选项表';

INSERT INTO `tb_voteoption` VALUES ('51', '13', '朱芳宇', '0');
INSERT INTO `tb_voteoption` VALUES ('52', '13', '王治郅', '1');
INSERT INTO `tb_voteoption` VALUES ('53', '13', '姚明', '0');
INSERT INTO `tb_voteoption` VALUES ('54', '13', '易建联', '0');
View Code

猜你喜欢

转载自www.cnblogs.com/Andres/p/8966068.html