Elasticsearch 全文搜索引擎

本文介绍了如何在PHP环境中安装和配置Elasticsearch,包括使用Composer安装,集成到CI框架,以及关键术语和基础操作如创建索引、全文搜索、文档的增删改查和批量操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装 Elasticsearch

  1. 安装composer工具(先检测是否安装有composer工具)

  1. 环境要求:PHP_VERSION >= 5.3.9

  1. 下载对应的Elasticsearch到本地(运行环境)

4. 在命令行运行:php composer.phar require elasticsearch/elasticsearch

5. 此时在指定目录下会出现一个vendor目录,安装成功(扩展)

集成到框架中(以CI框架为例,vendor目录放到框架的扩展文件夹中)

开启Elasticsearch服务(如果后面报错,先检查是否开启了服务,浏览器访问127.0.0.1:9200)

Elasticsearch相关术语介绍

储存已序列化为 JSON 文档的复杂数据结构,Elasticsearch 使用一种被称为倒排索引的数据结构,该结构支持快速全文搜索,在倒排索引里列出了所有文档中出现的每一个唯一单词并分别标识了每个单词在哪一个文档中,正是因为通过使用按字段数据结构组合,才使得Elasticsearch 拥有如此快速的搜索能力

took 花费时间

time_out标识查询是否超时

_shards查询分片信息,查询的分片总数,成功数和失败数

hits搜索结果,total是满足条件的说有所有数据的总数,hits是返回是实际数目(默认是10)

_scorce文档分数信息,与排名相关度有关

关键字:

行为

解释

create

当文档不存在时创建之。

index

创建新文档或替换已有文档。

update

局部更新文档。

delete

删除一个文档。

bulk

批量添加

全文查询

术语

说明

match

执行全文查询的标准查询,包括模糊匹配和短语或近似查询,分词后查询

match_phrase

与match查询类似,但用于匹配精确短语或单词近似匹配

match_phrase_prefix

与match_phrase查询类似,但对最后一个单词进行通配符搜索

multi_match

match查询的多字段版本

common_terms

一个更专门的查询,让更多的偏好非常用的单词

query_string

支持紧凑的Lucene 查询字符串语法,允许您在单个查询字符串中指定AND

simple_query_string

query_string适合直接向用户公开 的语法更简单,更健壮的版本

术语

说明

term

精确查找,查找某字段里面有某个关键词的文档,不进行分词查询,一般结合bool使用

terms

查找包含指定字段中指定的任何确切术语的文档

match_phrase_prefix

查找与一个或多个指定条款匹配的文档。必须匹配的术语数量取决于指定的最小值应匹配字段或脚本

range

查找指定字段包含指定范围内的值(日期,数字或字符串)的文档

exists

查找指定字段包含任何非空值的文档

prefix

查找指定字段中包含以指定的确切前缀开头的术语的文档

wildcard

查找指定字段包含与指定模式匹配的术语的文档,其中模式支持单字符通配符(?)和多字符通配符(*)

regexp

查找指定字段中包含与指定正则表达式匹配的字词的文档

fuzzy

查找指定字段中包含与指定字词模糊相似的字词的文档。测量模糊度的Levenshtein编辑距离 为1或2

type

查找指定类型的文档

ids

查找具有指定类型和ID的文档

range支持的符号

说明

gte

大于或等于

gt

大于

lte

小于或等于

lt

小于

boost

设置查询的权值,默认为1.0

术语

说明

constant_score

包含另一个查询的查询,但在过滤器上下文中执行该查询。所有匹配的文件都被赋予相同的“常量” _score

bool

配合查询字句使用。在must和should 条款有他们的分数相结合-更匹配的条款,更好的-而must_not和filter条款在过滤器上下文中执行

dis_max

一个接受多个查询的查询,并返回与任何查询子句匹配的任何文档。虽然bool查询结合了所有匹配查询的分数,但dis_max查询使用单个最佳匹配查询子句的分数

function_score

使用函数修改主查询返回的分数,以考虑流行度,新近度,距离或使用脚本实现的自定义算法等因素

boosting

返回与positive查询匹配的文档,但会降低也与negative查询匹配的文档的得分

must

必须符合的条件字段

should

符合条件的

must_not

不必须符合的

filter

过滤器

实际运用(基础使用方法,更详细的场景太多,就不一一列举了,主要还是在生产环境中多运用):

include( '引用地址');

use Elasticsearch\ClientBuilder;

class Test extends CI_Controller

{

public $client = null;

public $host=['127.0.0.1:9200'];

//初始

public function __construct() {

parent::__construct();

$this->client = ClientBuilder::create()->setHosts($this->host)->build();

}

//创建(免密码访问的配置方式)

public function index(){

$index['index'] = 'log'; //索引名称

$index['type'] = 'ems_run_log'; //类型名称

$data['body']['settings']['number_of_shards'] = 5; //主分片数量

$data['body']['settings']['number_of_replicas'] = 0; //从分片数量

$this->client->create($index);

}

//新增方法

public function add(){

$param = [

'index' => 'log',

'type' => 'ems_run_log',

'id' => 1,

'body' => ['mac' => 'fcd5d900beca','customer_id'=>3,'product_id'=>5,'version'=>2],

];

$response = $this->client->index($param);

print_r($response);

}

//批量添加

public function addlist(){

$params['index'] = 'paopao';

$params['type'] = 'test';

for($i = 1; $i <= 5; $i ++) {

$params['body'][]=array(

'create' => array( #注意create也可换成index

'_id'=>$i

),

);

$params['body'][]=array(

'name' => '张三' . $i,

'age' => 99 + $i

);

}

$response = $this->client->bulk($params);

print_r($response);

}

//查询方法

public function search(){

$index['index'] = 'log'; //索引名称

$index['type'] = 'ems_run_log'; //类型名称

$index['body']['query']['match']['mac'] = 'fcd5d900beca';

$index['size'] = 10;

$index['from'] = 200;

$response = $this->client->search($index);

var_dump($response);

}

//修改方法

public function edit(){

$param = [

'body' => ['mac' => '123456','customer_id'=>1,'product_id'=>2,'version'=>3],

];

$this->client->update(1,$param);

}

//删除方法

public function del(){

$index['index'] = 'log'; //索引名称

$index['type'] = 'ems_run_log'; //类型名称

$index['id'] = 1;

$this->client->delete($index);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值