Elasticsearch-PHP实战操作

一、前言

     这部分是Elasticsearch-php的实操篇,更多的是在框架中的测试。博主这边用的是Yii2.0框架。

基础篇:https://blog.csdn.net/LJFPHP/article/details/89113776

二、正文

1、首先是配置hosts

(1) 如果是本地测试:

  $hosts = [
        'localhost:9200',         // IP + Port
    ];

(2) 也可以通过hosts限制用户:

$hosts = [
'http://user:pass@localhost:9200',       // HTTP Basic Authentication
'http://user2:pass2@other-host.com:9200' // Different credentials on different host

];

2、索引相关操作:

(1) 创建索引

	$params = [
		'index' => 'my_index'
	];
$response = $client->indices()->create($params);  

创建复杂索引参考:https://www.elastic.co/guide/cn/elasticsearch/php/current/_index_management_operations.html#_put_mappings_api

(2) 查看索引

	$params = ['index' => 'my_index'];
	$response = $client->indices()->getSettings($params);

(3) 修改索引

	$params = [
			'index' => 'my_index',
			'body' => [
   			 'settings' => [
      			  'number_of_replicas' => 0,
        			'refresh_interval' => -1
  			  ]
	 ]
	];

	$response = $client->indices()->putSettings($params);

(4) 删除索引:

	$params = ['index' => 'my_index'];
	$response = $client->indices()->delete($params);

这部分看起来很像是mysql的增删改查,但返回的数据和数据库不一样,返回的都是es的标准对象数组。

3、索引的映射操作

(1) 在创建索引的时候,就可以设置mappings。这里的mappings可以理解为数据库的字段,我们在设置的时候,会指定字段名称,字段类型等。

更改或者创建索引的映射:

	$params = [
	 'index' => 'my_index',
	 'type' => 'my_type2',
		'body' => [
 		   'my_type2' => [
   		     '_source' => [
       		     'enabled' => true
     		   ],
     		     'properties' => [
      		      'first_name' => [
         		       'type' => 'string',
        		        'analyzer' => 'standard'
         		   ],
          	  	'age' => [
                	'type' => 'integer'
            	]
       	 ]
   	 ]
  ]
];
$client->indices()->putMapping($params);

(2) Get Mappings API 返回索引和类型的映射细节。

$params = ['index' => 'my_index'];
$response = $client->indices()->getMapping($params);

关于索引的操作都在: \Elasticsearch\Namespaces\Indices.php 文件下

4、索引文档:
当创建好索引和mapping之后,我们需要把文档加入到索引中去:

$params = [
	'index' => 'my_index',
	'type' => 'my_type',
	'id' => 'my_id',   //可以不指定id,不指定的话,es会自动生成一个随机字符串,
//‘routing’=>'xxxxx',
	'body' => [ 'testField' => 'abc']
];
$response = $client->index($params);

      自动生成的id,长度为20个字符,URL安全,base64编码,GUID,分布式系统并行生成时不可能会发生冲突。如果需要添加Routing等参数,可以写在index和type的后面。如上

批量索引,批量数据导入等,参考bulk索引:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html

5、查询:
      查询是重头戏,这里的查询,根据文档来看,就类似于我们平时用的sql语句,拆分一下就可以了
例如:

sql:
SELECT product
FROM   products
WHERE  (price = 20 OR productID = "XHDK-A-1293-#fJ3")
 AND  (price != 30)

      这种情况下,我们需要 bool (布尔)过滤器。 这是个 复合过滤器(compound filter) ,它可以接受多个其他过滤器作为参数,并将这些过滤器结合成各式各样的布尔(逻辑)组合。

ES搜索:

GET /my_store/products/_search
{
   "query" : {
      "filtered" : {   //我们仍然需要一个 filtered 查询将所有的东西包起来
         "filter" : {
            "bool" : {
              "should" : [
                 { "term" : {"price" : 20}},   //在 should 语句块里面的两个 term 过滤器与 bool 过滤器是父子关系,两个 term 条件需要匹配其一。
                 { "term" : {"productID" : "XHDK-A-1293-#fJ3"}} 
              ],
              "must_not" : {
                 "term" : {"price" : 30}   //如果一个产品的价格是 30 ,那么它会自动被排除,因为它处于 must_not 语句里面。
              }
           }
         }
      }
   }
}

以上只是个简单的例子,我们在实际开发中,肯定会用到很多复杂的组合,且学且珍惜吧。
参考ES手册:https://www.elastic.co/guide/cn/elasticsearch/guide/current/combining-filters.html

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
视频资源太大,这里提供百度云链接: 资源包括项目源码和所需的数据: 01-1 _课程导学~1.mp4 01-2 说明和建议~1.mp4 02-1 -术语介绍 .mp4 02-2 Document介绍.mp4 02-3 index介绍 .mp4 02-4 -restapi介绍 .mp4 02-5 -index_api .mp4 02-6 -document_api.mp4 03-01 -书的目录与索引.mp4 03-02 -正排与倒排索引简介.mp4 03-03 -倒排索引详解.mp4 03-04 -分词介绍.mp4 03-05 -analyze_api .mp4 03-06 -自带分词器.mp4 03-07 -中文分词.mp4 03-08 -自定义分词之CharacterFilter .mp4 03-09 自定义分词之Tokenizer .mp4 03-10 -自定义分词之 TokenFilter .mp4 03-11 -自定义分词.mp4 03-12 -分词使用说明 .mp4 03-13 -官方文档说明.mp4 04-01 -mapping简介.avi 04-02 -自定义 mapping .avi 04-03 -mapping演示.avi 04-04 -copy_to参数说明.avi 04-05 -index参数说明.avi 04-06 -index_options参数说明.avi 04-07 -mapping文档说明.avi 04-08 -数据类型.avi 04-09 -dynamic-mapping简介.avi 04-10 -dynamic日期与数字识别.avi 04-11 -dynamic-template简介.avi 04-12 -自定义mapping的建议.avi 04-13 -索引模板.mp4.avi 05-01 -SearchAPI概览.avi 05-02 -URISearch详解与演示.avi 05-03 -QueryDSL简介.avi 05-04 -字段类查询简介及match-query.avi 05-05 -相关性算分.mp4.avi 05-06 -match-phrase-query_音频.mp4.avi 05-07 -query-string-query.avi 05-08 -simple-query-string-query.avi 05-09 -term-terms-query.avi 05-10 -range-query.avi 05-11 -复合查询介绍及ConstantScore.avi 05-12 -bool-query.avi 05-13 -count-and-source-filtering.avi 06-01 -分布式介绍及cerebro.avi 06-02 -构建集群.avi 06-03 -副本与分片.avi 06-04 -两个问题.avi 06-05 -集群状态.avi 06-06 -故障转移.mp4.avi 06-07 -文档分布式存储.avi 06-08 -脑裂问题.avi 06-09 -shard详解.avi 07-1 -Query-Then-Fetch.avi 07-2 -相关性算分.avi 07-3 -sorting-doc-values-fielddata.avi 07-4 -分页与遍历-fromsize.avi 07-5 分页与遍历.avi 07-6 分页与遍历-search_after.avi 07-7 文档说明.mp4.avi 08-1 -聚合分析简介.avi 08-2 -metric聚合分析.avi 08-3 -bucket聚合分析.avi 08-4 -bucket和metric聚合分析.avi 08-5 -pipeline聚合分析.avi 08-6 -作用范围.avi 08-7 -排序.avi 08-8 -原理与精准度问题.avi 08-9 -文档说明.avi 09-1 -数据建模简介.avi 09-2 -ES数据建模配置相关介绍.avi 09-3 -ES数据建模实例.mp4.avi 09-4 -Nested_Object.avi 09-5 -Parent_Child.avi 09-6 -nested_vs_parent_child.avi 09-7 -reindex.avi 09-8 其他建议.avi 10-1 生产环境部署建议.avi 10-2 写性能优化.avi 10-3 读性能优化.avi 10-4 如何设定shard数.avi 10-5 xpack监控功能介绍.avi 11-1 入门及架构简介.avi 11-2 -Life_of_an_Event.avi 11-3 -queue简介.avi 11-4 -线程简介.avi 11-5 配置简介.avi 11-6 多实例运行.avi 11-7 pipeline配置简介.avi 12-01 input插件详解及glob讲解.avi 12-02 -codec插件详解.avi 12-03 filter插件简介及date插件讲解.avi 12-04 filter插件之grok简介(上).avi 12-05 filter插件之grok简介(下).avi 12-06 filter插件之dissect讲解.avi 12-07 filter插件之mutate 讲解.avi 12-08 filter插件之 json讲解.avi 12-09 filter 插件之geoip和ruby 讲解.avi 12-10 output插件简介.avi 12-11 文档说明.avi 123.bat 13-1 -Logstash实战建议.avi 13-2 -实战之apacheLogs(上).avi 13-3 实战之apacheLogs(下).avi 13-4 实战之csv.avi 13-5 监控运维建议.avi 14-1 beats简介.avi 14-2 Filebeat_Demo.avi 14-3 Filebeat 简介及流程介绍.avi 14-4 Filebeat常见架构及ingest_node介绍.avi 14-5 Filebeat_Module简介.avi 15-1 -简介.avi 15-2 -Module简介.avi 15-3 -实战.mp4.avi 16-1 1-简介(1).avi 16-1 1-简介(1).avi.baiduyun.downloading 16-1 1-简介.avi 16-2 2-实战.avi 17-1 1-Heartbeat.avi 17-2 2-Community_beats.avi 18-1 -配置与线上部署建议.avi 18-2 -Index_Pattern_Objects_Settings使用.avi 19-1 -导入数据.avi 19-2 -Discover实战.avi 20-1 -可视化简介.avi 20-2 -Basic_Charts_介绍.avi 20-3 -Basic_Charts_其他说明.avi 20-4 -Data图表介绍.avi 20-5 -Map图表介绍.avi 20-6 -Timelion介绍.avi 20-7 -VisualBuilder介绍.avi 20-8 -other图表介绍.avi 20-9 -Dashboard介绍.avi 21-1 -项目介绍.avi 21-2 项目实战.avi 22-1 介绍和数据导入.avi 22-2 -实战.avi 23-1 项目简介.avi 23-2 实战(上).avi 23-3 实战(下).avi 24-1 课程总结.avi codes.zip project.zip 文件树.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铁柱同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值