• 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 ElasticsearchClientBuilder;  
      
      
    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 = ElasticsearchClientBuilder::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 = ElasticsearchClientBuilder::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 = ElasticsearchClientBuilder::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
  • 相关阅读:
    BZOJ 2069 POI2004 ZAW 堆优化Dijkstra
    浏览器大小屏适配的方法
    编译性语言&amp;解释性语言
    ubuntu 查看网卡 数据包处理 速度
    使用Newtonsoft JsonConvert反序列化Json数据到DataTable
    easyUI datagrid view扩展
    easyUI layout 中使用tabs+iframe解决请求两次方法
    oracle自定义判断数据是否为数值函数
    easyUI datagrid editor扩展dialog
    JavaScript格式化日期
  • 原文地址:https://www.cnblogs.com/Andres/p/8966068.html
Copyright © 2020-2023  润新知