Laravel-Elasticsearch探索

Elasticsearch技术出现也有段时间了,一直很好奇想了解一下,利用周末时间了解熟悉一下;
Elasticsearch 是一个基于 Apache Lucene™ 的开源搜索引擎;Lucene 只是一个库;Elasticsearch 也是使用 Java 编写并使用 Lucene 来建立索引并实现搜索功能
分布式的实时文件存储,每个字段都被索引并可被搜索
实时分析的分布式搜索引擎
可以扩展到上百台服务器,处理PB级结构化或非结构化数据
在安装Elasticsearch引擎之前,必须安装ES需要的软件环境,安装Java JDK和配置JAVA_HOME环境变量(我的电脑里JDK版本是1.8.1);我的PHP版本是7.2.1的;我下载的es版本是7.2
每次使用前开启ES;到目录:
C:\Users\Administrator\Downloads\elasticsearch-7.2.1-windows-x86_64\elasticsearch-7.2.1\bin 下面 双击启动elastaicsearch.bat (第二个)
用比较上手的Laravel框架去实践一下;laravel框架有专门的包来实现Elasticsearch ;
安装过程 可以详细看连接文档: https://www.pianshen.com/article/67441952280
在这里插入图片描述
启动ES后默认端口是9200:
在这里插入图片描述
用ES的index()方法循环导入了4562716条记录(之前导入过2万感觉和mysql的like查询没区别都是需要50ms左右);
在这里插入图片描述
Mysql记录:
在这里插入图片描述
在这里插入图片描述
搜索代码:
在这里插入图片描述
搜索的效率还是很快的:第一次可能慢点大概800ms,后面只需要几十毫秒(30~40毫秒);
在这里插入图片描述
mysql的like查询大概需要1.6s; 加索引没用因为like查询不会走索引
在这里插入图片描述
代码:============================

<?php

namespace App\Http\Controllers\Api;

use App\Entities\RandCode;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class ElastaicSearchController extends Controller
{
    
	/**
	 * laravel-elastaicSearch
	 * @return \Illuminate\Http\JsonResponse
	 */
	public function add(Request $request)
	{
		set_time_limit(0);
		ini_set('memory_limit', '2048M');
		
		$client = \Elasticsearch\ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();
		//循环个45.6万条 效率如何
		$res = [];
		for($i = 0; $i < 4562716; $i++){
			$generate_password = $this->generate_password(8);
			$params = [];
			$params = [
				'index' => 'products',
				'type' => 'es_testing',
				'id' => $i,
				'body' => [
					'title' => $generate_password, //8位随机字符串
					'description' => $i.'有关于ElasticSearch使用方法之谈',
					'create_time' => now(),
				],
			];
			$client->index($params);
			\DB::insert("insert into rand_code(rand_code) values(?)",[$generate_password]);
		}
		echo '<pre>';
		print_r('done');die;
	}
	
	//搜索
	public function search(Request $request)
	{
		$where = [];
		if($request->title)
		{
			$where["title"] = [
					"query"=>$request->title,
					"slop"=>20
			];
		}
		if($request->description)
		{
			$where["description"] = [
					"query"=>$request->description,
					"slop"=>20
			];
		}
	
		if($where)
		{
			$params = [
					'index' => 'products',
					'type' => 'es_testing',
					'body' => [
							'query' => [
									'match_phrase' => $where
							]
					]
			];
			$hosts = [ '127.0.0.1:9200' ]; // IP + Port
			$client = \Elasticsearch\ClientBuilder::create()           // Instantiate a new ClientBuilder
			->setHosts($hosts)      // Set the hosts
			->build();
			$results = $client->search($params);
			$products = $results['hits']['hits'];
		}else{
			$products = [];
		}
		
		echo '<pre>';
		print_r($products);die;
	}
	
	function generate_password( $length = 10 ) {
		// 密码字符集,可任意添加你需要的字符
		$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
		$password = '';
		for ( $i = 0; $i < $length; $i++ )
		{
			$password .= $chars[ mt_rand(0, strlen($chars) - 1) ];
		}
		return $password;
	}
	
}

以上只是简单压测和练习一下,如有不足还请多指教

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值