<?php
/**
* Created by PhpStorm.
* User: brady
* Date: 2018/4/8
* Time: 10:31
* esticsearch helper
*/ require APPPATH.'third_party/vendor/autoload.php'; use Elasticsearch\ClientBuilder; class O_es
{
protected $db_name;
protected $tb_name;
protected $client;
protected $host; //初始化
public function init($db_name,$tb_name)
{ try{
$this->db_name = $db_name;
$this->tb_name = $tb_name;
$this->host = config_item('db')['host'];
if(ENVIRONMENT !== 'development'){
$host=['172.18.30.69:9200'];
$this->client = ClientBuilder::create()->setHosts($host)->build();
} else {
$this->client = ClientBuilder::create()->build();
} return $this->client;
} catch(Exception $e){
$msg = $e->getMessage();
echo json_encode(['success'=>false,'msg'=>$msg]);exit;
}
} public function add_doc($id,$body=[])
{
$params = [
'index' => $this->db_name,
'type' => $this->tb_name,
'id' => $id,
'body' => $body
];
$response = $this->client->index($params);
if( isset($response['_shards']['successful']) && $response['_shards']['successful'] >0){
return true;
} else {
return false;
}
} //根据id获取完整的搜索结果
public function get_doc($id)
{ try{
$params = [
'index' => $this->db_name,
'type' => $this->tb_name,
'id' => (string)$id
]; $response = $this->client->get($params);
return $response;
} catch(Exception $e){
$msg = $e->getMessage();
echo json_encode(['success'=>false,'msg'=>$msg]);exit;
} } //根据id获取搜索结果
public function get_doc_source($id)
{
$params = [
'index' => $this->db_name,
'type' => $this->tb_name,
'id' => $id
]; $response = $this->client->getSource($params);
return $response;
} //文档搜索
public function search_index($search_index,$search_val)
{
try { $params = [
'index' => $this->db_name,
'type' => $this->tb_name,
'body' => [
'query' => [
'match' => [
$search_index => $search_val
]
]
]
]; $response = $this->client->search($params);
if($response['hits']['total'] > 0) {
return $response['hits']['hits'];
} else {
return false;//未搜索到
} } catch(Exception $e){
$msg = $e->getMessage();
echo json_encode(['success'=>false,'msg'=>$msg]);exit;
}
} public function search_index_mul($field,$string,$type='dis_max',$tie_breaker = 0.3)
{ try { foreach($field as $v){
$querys[] = ['match'=>[$v=>$string]];
} switch($type)
{
case 'dis_max':
{
$body = [
'query'=>[
$type=>[
'queries'=>[ ],
'tie_breaker'=>$tie_breaker
]
]
];
$body['query'][$type]['queries'] = $querys;
}
break; case 'bool':
{
$body = [
'query'=>[
$type=>[
'should'=>[ ]
]
]
];
$body['query'][$type]['should'] = $querys;
}
break; default :
{
$body = [
'query'=>[
$type=>[
'queries'=>[ ]
]
]
];
$body['query'][$type]['queries'] = $querys;
}
break; } $params = [
'index' => $this->db_name,
'type' => $this->tb_name,
'body' => $body
];
$response = $this->client->search($params);
if($response['hits']['total'] > 0) {
return $response['hits']['hits'];
} else {
return [];//未搜索到
} } catch(Exception $e){
$msg = $e->getMessage();
echo json_encode(['success'=>false,'msg'=>$msg]);exit;
}
} //文档删除
public function del_doc($id)
{
try{
$params = [
'index' => $this->db_name,
'type' => $this->tb_name,
'id' => (string)$id
];
$response = $this->client->delete($params);
return $response;
} catch(Exception $e){
$msg = $e->getMessage();
echo json_encode(['success'=>false,'msg'=>$msg]);exit;
}
} public function add_index()
{
$params = [
'index' => $this->db_name,
'body' => [
'settings' => [
'number_of_shards' => 2,
'number_of_replicas' => 0
]
]
]; $response = $this->client->indices()->create($params);
print_r($response);
} public function del_index()
{
$deleteParams = [
'index' => $this->db_name
];
$response = $this->client->indices()->delete($deleteParams);
return $response;
} }

  

  $this->load->model("O_es");
$this->load->model("Tb_articles");
$this->O_es->init(config_item("db")['db'],'articles'); //$res = $this->Tb_articles->get_list(1,1000,'*','desc'); // $this->O_es->del_index();
// foreach($res as $v){
// $res = $this->O_es->add_doc($v['id'],$v);
// dump("索引".$v['id'].$res);
// } // $res = $this->O_es->add_doc('1',['testField' => 'hello 天安门']);
//$res = $this->O_es->add_doc('1',['title' => 'Quick brown rabbits','body'=>'Brown rabbits are commonly seen.']);
// $res = $this->O_es->add_doc('2',['title' => 'Keeping pets healthy','body'=>'My quick brown fox eats rabbits on a regular basis.']);
//dump($res);
$list = $this->O_es->search_index_mul(['title','content'],'bootstrap');
if(!empty($list))
{
foreach($list as $v){
dump($v['_source']);
}
}

  

elasticsearch 工具类的更多相关文章

  1. ElasticSearch 工具类封装(基于ElasticsearchTemplate)

    1.抽象接口定义 public abstract class SearchQueryEngine<T> { @Autowired protected ElasticsearchTempla ...

  2. elasticsearch java工具类

    docker运行elasticsearch docker pull elasticsearch:7.8.1 docker run -p 9200:9200 -p 9300:9300 -e " ...

  3. es2.4.6 java api 工具类

    网上找了很久没找到2.4.X 想要的java api 工具 自己写了一个,分享一下 导入所需的jar <!-- ElasticSearch begin --> <dependency ...

  4. Maven基础&&Spring框架阶段常用工具类整理

    常用工具类 1.密码加密工具类: package com.itheima.utils; import java.security.MessageDigest; import sun.misc.BASE ...

  5. elasticsearch通用工具类

    这几天写了一个关于es的工具类,主要封装了业务中常用es的常用方法. 本文中使用到的elasticsearch版本6.7,但实际上也支持es7.x以上版本,因为主要是对springboot提供的:El ...

  6. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  7. Android—关于自定义对话框的工具类

    开发中有很多地方会用到自定义对话框,为了避免不必要的城府代码,在此总结出一个工具类. 弹出对话框的地方很多,但是都大同小异,不同无非就是提示内容或者图片不同,下面这个类是将提示内容和图片放到了自定义函 ...

  8. [转]Java常用工具类集合

    转自:http://blog.csdn.net/justdb/article/details/8653166 数据库连接工具类——仅仅获得连接对象 ConnDB.java package com.ut ...

  9. js常用工具类.

    一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:[格式化时间] * 使用方法 * 示例: * ...

随机推荐

  1. code ELIFECYCLE (代码周期)

    问题:build 不成功 解决:新建一个dist 文件,没有自动新建dist 文件 问题 :npm run dev 时候 解决:

  2. javaweb--json--ajax--mysql实现省市区三级联动(附三级联动数据库)

    在web中,实现三级联动很常见,尤其是利用jquery+json.但是从根本上来说jquery并不是最能让人容易理解的,接下来从最基本的javascript开始,实现由javascript+json+ ...

  3. Java反射的两种使用方法

    1.创建User.java package com.tao.test; public class User { private String name; private int id; public ...

  4. jqGrid使用手册

    JQGrid是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信. JQGrid Demo 是一个在线的演示项目.在这里,可以知道jqgrid可以做什么事情.jQgrid 使用详 ...

  5. jquery之prop与attr区别。

    一切看下面代码示例<!DOCTYPE html> <html> <head> <title>全选和反选</title> <script ...

  6. python网络编程,通过服务名称和会话类型(tcp,udp)获取端口号,简单的异常处理

    作为一个php程序员,同时有对网络方面感兴趣,php就比较蛋疼了,所以就抽了些时间看python 之前学python基础因为工作原因,断断续续的看了个基础,差不多是可以写代码了 最近在看<pyt ...

  7. 为什么不早点使用 Git...

    教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013739628770 ...

  8. Hadoop==zookeeper

    Zookeeper 每一个专业的技术总可以在生活中找到相应的实例,就比如说zookeeper,攘其外必先安其内就很好的解释了zookeeper,Hadoop集群的组件中的很多在学习的时候都会觉得每一个 ...

  9. 最短路径算法 1.Floyed-Warshall算法

    这几周开始正式系统学习图论,新学期开始新的记录.由于二模和生物地理两门高考的临近,时间比较仓促,所以暂时跳过图论的(一)和(二),即图的储存和遍历.从最短路径算法学起,首先要学习的是Floyed-Wa ...

  10. 42-EF Core Migration

    1-常用命令 1-由于2.1版本有点不一样,不会自动创建ApplicationUser类,发现合并没效果.暂时略 增加一个字段 E:\coding\netcore\IdentitySample> ...