elasticsearch 简单使用【php版本】

这篇具有很好参考价值的文章主要介绍了elasticsearch 简单使用【php版本】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

版本说明

  • 本文是在es8.4.1下进行操作,同时已经安装了ik分词器。
  • php操作es的库为​elasticsearch-php,github地址为:
    GitHub - elastic/elasticsearch-php: Official PHP client for Elasticsearch.
  • 所有的操作都基于本地服务器进行,本地安装时关闭了安全验证
  • index为goods,mapping结构如下:
{
  "goods": {
    "mappings": {
      "properties": {
        "brand": {
          "type": "keyword"
        },
        "content": {
          "type": "text",
          "analyzer": "ik_max_word"
        },
        "id": {
          "type": "integer"
        },
        "sort": {
          "type": "integer"
        },
        "title": {
          "type": "text",
          "analyzer": "ik_smart"
        }
      }
    }
  }
}
  • 进行操作时,新建es对象
use Elastic\Elasticsearch\ClientBuilder;
$client = ClientBuilder::create() ->setHosts(['localhost:9200']) ->build();

一些查询操作

我们使用es的情景大部分都是查询,下面列举一些常用的操作场景以及对应的代码

获取mapping结构

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

批量批量插入数据

//$count 为从数据库中取的总数,$result为对应的结果集
for($i = 0; $i < $count; $i++) {
    $add_params['body'][] = [
        'index' => [
            '_index' => "goods",
            '_id' => ($i+1) . ""
        ],
    ];
    $add_params['body'][] = [
        'id' => $result[$i][0] + 1,
        'title' => $result[$i][1],
        'content' => $result[$i][2],
        'sort' => $result[$i][3],
        'brand' => $result[$i][4],
    ];
}
$responses = $client->bulk($add_params);

删除文档数据

$delete_params = [
    'index' => 'goods',
    'body' => [
        'query' => [
            'range' => [
                'id' => [
                	//删除id > 1的文档记录
                    'gte' =>1
                ]
            ]
        ]

    ]
];
$responses = $client->deleteByQuery($delete_params);

查询title中包含关键词懒虫的文档记录

// match 会对查询的关键词进行分词,term不会。例如查询华为手机,match会查询title中包含华为或者手机或者华为手机的,term不会对查询的关键词做拆分
//不支持对多个字段进行同时查询
//es默认返回10条记录,可以用from(偏移量)和size(pagesize)进行分页
$params = [
    'index' => 'goods',
    'body'  => [
        'query' => [
            'term' => [
//            'match' => [
                'title' => '懒虫天鹅'
            ]
        ]
    ],
    'from' => 0, //分页的位置
    'size' => 20 //返回多少条
];

$response = $client->search($params)->asArray();

模糊查询之wildcard、前缀查询

$params = [
    'index' => 'goods',
    'body'  => [
        'query' => [
        //wildcard会对查询条件进行分词,后面可以接* ? 通配符进行匹配
        // prefix前缀匹配,匹配到分词中以设置的关键词开头的分词
//            'wildcard' => [
            'prefix' => [
                'brand' => '星'
            ]
        ]
    ],
    'from' => 0,
    'size' => 20
];

范围查询

$params = [
    'index' => 'goods',
    'body'  => [
        'query' => [
            'range' => [
                'sort' => [
                    'gte' => 10,
                    'lte' => 100,
                ]
            ]
        ]
    ],
    'from' => 0,
    'size' => 20
];

bool查询

//bool查询,多个条件共同成立,有四种选择,must(计算得分,性能较低) filter(过滤条件,不计算得分,性能高),must_not(条件必须不成立),should(条件可以成立)

//查询title包含懒虫且brand中含有华为的文档记录
$params = [
    'index' => 'goods',
    'body'  => [
        'query'=>[
            'bool' => [
                'filter' => [
                    //多个筛选条件时,每个term是数组形式
                    ['term' => ['title' => '懒虫',]],
                    ['term' => ['brand' =>'华为',]]
                ]
            ]
        ]
    ],
    'from' => 0,
    'size' => 30
];

多个字段不同关键词查询的并集操作

$params = [
    'index' => 'goods',
    'body'  => [
        'query'=>[
        	//查询title包含懒虫或者brand包含华为的文档记录
            'dis_max' => [
                'queries' => [
                    //多个筛选条件时,每个term是数组形式
                    ['term' => ['title' => '懒虫',]],
                    ['term' => ['brand' =>'华为',]]
                ]
            ]
        ],
        //对结果进行聚合操作
        'aggs' => [
            //最大得分的记录,返回的结果字段为max_sort
            'max_sort' => [
                'max' => ['field' => 'sort']
            ],
            //对查询结果按brand进行聚合汇总,取出前size条记录
            'goods_brand_rank' => [
                'terms' => [
                    'field' => 'brand',
                    'size' => 10
                ]
            ]
        ],
        //对结果进行高亮显示
        'highlight' => [
        	//这里定义高亮显示的字段以及高亮显示的tag,前端拿到tag后进行处理
            'fields' => [
                'title' => [
                    'pre_tags' => '<font color="red">',
                    'post_tags' => '</font>',
                ]
            ]
        ]
    ],
    'from' => 0,
    'size' => 30
];

文章来源地址https://www.toymoban.com/news/detail-410337.html

到了这里,关于elasticsearch 简单使用【php版本】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • php使用ElasticSearch

    Elasticsearch 是一个 分布式 的、开源的 搜索分析引擎 ,支持各种数据类型,包括文本、数字、地理、结构化、非结构化。 Apache Lucene是一款高性能的、可扩展的信息检索(IR)工具库,是由Java语言开发的成熟、自由开源的搜索类库,基于Apache协议授权。Lucene只是一个软件类库

    2024年03月22日
    浏览(54)
  • Git的简单使用说明

    git的最主要的作用:版本控制,协助开发 ​​ 1.本地版本控制 ​​  2.集中版本控制 ​​  所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题 ,或在不同分支工作。而且,所有数据

    2024年01月22日
    浏览(43)
  • Serial Studio简单使用说明

    Serial Studio是一个跨平台的软件,支持将串口,TCP/UDP,MQTT等协议传输数据,并将数据可视化显示,方便嵌入式开发人员实现数据的可视化展示,呈现和分析其项目和设备生成的数据,而无需为每个项目编写专门的上位机软件,仅需做json配置即可快速启动上位机展示界面。 S

    2024年02月09日
    浏览(43)
  • Elasticsearch常用接口使用说明以及postman调用调试

    接口url:http://xxxx:9200/_cat   http://xxxx:9200/_cat/indices?v   http://xxxx:9200/test-20230526?pretty 返回值 {      \\\"acknowledged\\\" :  true ,      \\\"shards_acknowledged\\\" :  true ,      \\\"index\\\" :  \\\"test-20230526\\\" }   http://xxxx:9200/seatunnel-20230526/_search?q=*pretty   http://xxxx:9200/_bulk 类型:POST Header: Content-Type  

    2024年02月07日
    浏览(98)
  • Vue-计算属性(computed)简单说明和使用

    学习vue的计算属性之前,我们先写一个案例,我们先用插值语法实现,然后再使用vue的计算属性实现,经过对比,我们就能掌握计算属性的精髓和原理 写一个简单的例子,姓和名分别用两个输入框控制,最后通过一个span标签拼接成一个全名 首先通过简单的插值语法实现,需

    2024年01月16日
    浏览(50)
  • PHP 如何使用 Elasticsearch 的 索引 API 接口

    目录 一、实战场景 二、知识点 PHP Elasticsearch 索引 index MySQL 三、菜鸟实战 如何在 PHP 中使用 Elasticsearch 的索引 API 接口 PHP Elasticsearch 索引 index MySQL Elasticsearch 本质上是一个数据库,但并不是 MySQL 这种关系型数据库,查询语言也不是 SQL,而是 Elasticsearch 自己的一套查询语言。

    2024年02月13日
    浏览(52)
  • Elasticsearch本地单机配置以及php组件使用记录

     键值对模式 info 方法 $client-info();

    2024年01月17日
    浏览(48)
  • Spark 部署与应用程序交互简单使用说明

    本文将讲解 Spark 的部署,并通过三个简单的步骤来编写一个独立应用程序。 我们将使用本地模式,其中所有的处理都是在Spark shell中的一台机器上完成的——这是学习框架的一种简单方法,迭代执行的方式可以及时反馈直接结果。使用Spark shell,可以在编写复杂的Spark应用程

    2024年04月12日
    浏览(40)
  • 使用PHP和Redis实现简单秒杀功能

    安装Redis 首先,需要在服务器上安装Redis。如果使用Linux系统,可以使用命令行安装。如果使用Windows系统,可以下载并安装Redis二进制文件。 创建Redis连接 在PHP中,可以使用Redis扩展来连接Redis服务器。需要在PHP文件中包含Redis扩展,并创建一个Redis连接对象。 创建秒杀商品 在

    2024年02月14日
    浏览(39)
  • 【数据结构】C--顺序表1.0版本(本文非常适合小白观看,已尽力详解,以及图解也是尽量列举)

    目录 0.前言 什么是数据结构? 1.逻辑结构: 1.1线性结构: 1.2非线性结构:         (1)集合         (2)树形结构         (3)图形结构或者网状结构 2.存储结构 一.线性表 二.顺序表 顺序表与数组的关系:(非常容易混淆) 1.静态顺序表:使用定长数组存储元素 2.动态顺序表

    2024年02月06日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包