GVKun编程网logo

PHP 如何使用 Elasticsearch 的 索引 API 接口(elasticsearch php怎么用)

3

本篇文章给大家谈谈PHP如何使用Elasticsearch的索引API接口,以及elasticsearchphp怎么用的知识点,同时本文还将给你拓展Apifox:API文档、API调试、APIMock

本篇文章给大家谈谈PHP 如何使用 Elasticsearch 的 索引 API 接口,以及elasticsearch php怎么用的知识点,同时本文还将给你拓展Apifox:API 文档、API 调试、API Mock、API 自动化测试一体化协作平台、AudioFocusRequest.Builder() 需要 API 级别 26,但我想在 API 级别 22 上使用它,有什么方法可以在低于 API 26 的 API 级别上使用它吗?、docker 部署 elasticsearch + elasticsearch-head + elasticsearch-head 跨域问题 + IK 分词器、ElasticSearch (一) ElasticSearch 的应用场景及为什么要选择 ElasticSearch?等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

PHP 如何使用 Elasticsearch 的 索引 API 接口(elasticsearch php怎么用)

PHP 如何使用 Elasticsearch 的 索引 API 接口(elasticsearch php怎么用)

实战场景

如何在 PHP 中使用 Elasticsearch 的索引 API 接口

知识点

  • PHP

  • Elasticsearch

  • 索引 index

  • MySQL

Elasticsearch 本质上是一个数据库,但并不是 MySQL 这种关系型数据库,查询语言也不是 SQL,而是 Elasticsearch 自己的一套查询语言。既然是数据库,有一些概念是互通的,如下表:

图片

菜鸟实战

基础环境准备可参考之前文章。

创建索引

发送创建请求

PHP

// 创建索引

public function create(Request $request){

    // 获取索引名称

    $testIndex = $request->get("index_name", "test");


    // 执行

    $client = EsHelper::getEsClient();

    $params = [

        ''index'' => $testIndex,

    ];

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


    // 返回

    $data = [

        ''es_info'' => $response->asArray(),

    ];

    $this->success($data);

}

创建索引返回结果

JSON

{

    "code": 0,

    "message": "ok",

    "data": {

        "es_info": {

            "acknowledged": true,

            "shards_acknowledged": true,

            "index": "test"

        }

    }

}

更加复杂的参数

可指定主分片个数:number_of_shards

可指定副分片个数:number_of_replicas

PHP

$params = [

    ''index'' => ''my_index'',

    ''body'' => [

        ''settings'' => [

            ''number_of_shards'' => 3,

            ''number_of_replicas'' => 2

        ],

        ''mappings'' => [

            ''my_type'' => [

                ''_source'' => [

                    ''enabled'' => true

                ],

                ''properties'' => [

                    ''first_name'' => [

                        ''type'' => ''string'',

                        ''analyzer'' => ''standard''

                    ],

                    ''age'' => [

                        ''type'' => ''integer''

                    ]

                ]

            ]

        ]

    ]

];

查询索引详情

发送查询请求

PHP

// 查询索引

public function detail(Request $request){

    // 获取索引名称

    $queryIndexName = $request->get("index_name", "test");

    $params = [

        ''index'' => $queryIndexName,

    ];

    // 执行

    $client = EsHelper::getEsClient();


    $result = "";

    try {

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

        $result = $response->asArray();

    }catch (\Exception $e){

        $result = $e->getMessage();

    }


    // 返回

    $data = [

        ''es_info'' => $result,

    ];

    $this->success($data);

}

响应结果

JSON

{

    "code": 0,

    "message": "ok",

    "data": {

        "es_info": {

            "test1": {

                "aliases": [],

                "mappings": [],

                "settings": {

                    "index": {

                        "routing": {

                            "allocation": {

                                "include": {

                                    "_tier_preference": "data_content"

                                }

                            }

                        },

                        "number_of_shards": "1",

                        "provided_name": "test1",

                        "creation_date": "1669179904968",

                        "number_of_replicas": "1",

                        "uuid": "Y62XH2Z4RC-kd2cKieOu9Q",

                        "version": {

                            "created": "8050199"

                        }

                    }

                }

            }

        }

    }

}

更新索引

发送更新索引请求

PHP

// 更新索引

public function update(Request $request){

    // 获取索引名称

    $indexName = $request->get("index_name", "test");

    $number_of_replicas = $request->get("number_of_replicas", 1);


    // 确定参数

    $params = [

        ''index'' => $indexName,

        ''body'' => [

            ''settings'' => [

                ''number_of_replicas'' => $number_of_replicas,

            ]

        ]

    ];


    // 执行

    $client = EsHelper::getEsClient();

    try {

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

        $result = $response->asArray();

    }catch (\Exception $e){

        $result = $e->getMessage();

    }


    // 返回

    $data = [

        ''es_info'' => $result,

    ];

    $this->success($data);

}

响应结果

JSON

{

    "code": 0,

    "message": "ok",

    "data": {

        "es_info": {

            "acknowledged": true

        }

    }

}

删除索引

发送删除索引请求

PHP

// 删除索引

public function delete(Request $request){

    // 获取索引名称

    $indexName = $request->get("index_name", "test1");


    // 确定参数

    $params = [

        ''index'' => $indexName,

    ];


    // 执行

    $client = EsHelper::getEsClient();

    try {

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

        $result = $response->asArray();

    }catch (\Exception $e){

        $result = $e->getMessage();

    }


    // 返回

    $data = [

        ''es_info'' => $result,

    ];

    $this->success($data);

}

响应结果

JSON

{

    "code": 0,

    "message": "ok",

    "data": {

        "es_info": {

            "acknowledged": true

        }

    }

}

通过上述步骤,就将 php 与 Elasticsearch 的索引操作连通了,接下来就可以在索引上创建文档了。

Apifox:API 文档、API 调试、API Mock、API 自动化测试一体化协作平台

Apifox:API 文档、API 调试、API Mock、API 自动化测试一体化协作平台

我是 ABin-阿斌:写一生代码,创一世佳话,筑一览芳华。 如果小伙伴们觉得文章有点 feel ,那就点个赞再走哦。

在这里插入图片描述

声明:原位地址:https://blog.csdn.net/web15286201346/article/details/126098695

文章目录

  • 一、apifox简介及下载:
  • 二、apifox页面布局简介:
    • 1、apifox几个简单概念:
    • 2、以项目单位分组
    • 3、点击项目后进入项目,在该项目下管理接口。
      • 1、新建接口
      • 2、修改接口:
      • 3、运行接口:
      • 4、断言:
      • 5、批量运行:
  • 三、 总结

一、apifox简介及下载:

1、apifox:是 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台

2、定位 :Postman + Swagger + Mock + JMeter

3、下载与安装:

官网下载地址:https://www.apifox.cn/

按照需要下载对应版本,下载完毕后解压安装即可。

二、apifox页面布局简介:

1、apifox几个简单概念:

(1)团队:该工具支持团队协同办公,可以根据需要 创建不同的团队,在工具页面左侧,显示自己的团队,也可新建团队

新建团队,需要一个团队 名称:

创建成功团队后,可以邀请成员、设置权限等,或删除团队

有了团队,就可以开始我们接口的管理及测试工作了。

2、以项目单位分组

  • apifox是以团队下项目来管理接口的,将所需接口维护在项目中,在不同的项目中对 接口进行维护及操作。

3、点击项目后进入项目,在该项目下管理接口。

1、新建接口

  • 维护接口信息,包括接口URL,接口基础信息,请求参数等,需要注意的是,此处只维护接口信息,类似于接口文档,不运行接口

接口URL,http协议及域名部分,建议设置在环境中,页面右上角选择环境处,可维护环境信息,因为我们在测试工作中,往往会有多个环境,将协议及域名维护在环境中,测试不同环境的同一个接口时,只需要切换环境即可,不用不同环境维护不同的接口。

对于需要cookie的接口,在维护接口时,请求参数中,别忘了维护cookie信息。

2、修改接口:

在接口管理-修改文档下,可修改已维护的接口信息

3、运行接口:

  • 接口运行,往往是依据测试用例,在接口测试中,可以简单的认为不同的传值即为不同的测试用例,apifox中,运行接口的入口在项目中,接口管理-运行下,在此处修改参数值,点击发送后,可已看到返回信息
  • 此外,可将运行数据保存为用例,保存成功后,此次运行的数据会保存,下次打开该用例,其中参数值可复用(注:运行接口时,需要选择环境)

若设置了断言,可根据断言判断此条用例是否通过:

修改了参数值信息,需要点击保存才能更新成功,若不保参数值依然为修改前值。

测试用例显示在接口的下一级,可通过复制用例的方式,维护多个用例。

4、断言:

对测试用例,可以设置其断言,即期望结果,apifox在后置操作中进行断言

apifox断言核心为提取表达式,该提取表达式很简单,即将目标返回字段提取出来,$及为根节点,一级一级定位到目标字段即可

举个例子:若返回信息如下图所示,我想通过sort_finish字段值断言,则提取该字段的表达式为:$.data.sort_data.Box_no

5、批量运行:

  • apifox的批量运行,在自动化测试页面,可在该页面添加一个分组,在分组下添加测试用例,创建完测试用例后进入所创用例,即可添加步骤,此时可导入接口用例


导入用例后,可根据需要设置循环次数及线程数等信息,点击运行,即可批量执行,执行完成后,显示此次执行结果:

三、 总结

  • 以上:为 apifox 基本使用功能,变量提取、套件使用等,待续~

AudioFocusRequest.Builder() 需要 API 级别 26,但我想在 API 级别 22 上使用它,有什么方法可以在低于 API 26 的 API 级别上使用它吗?

AudioFocusRequest.Builder() 需要 API 级别 26,但我想在 API 级别 22 上使用它,有什么方法可以在低于 API 26 的 API 级别上使用它吗?

如何解决AudioFocusRequest.Builder() 需要 API 级别 26,但我想在 API 级别 22 上使用它,有什么方法可以在低于 API 26 的 API 级别上使用它吗?

我正在开发一个媒体播放器应用程序,我希望它支持的最小 API 级别是 API 22。

我想使用 Audio Focus 进行媒体播放,但是 AudioFocusRequest.Builder() 在低于 API 26 的 API 级别上不起作用,并且曾经在低于 API 26 的 API 级别上工作的方法 requestAudioFocus() 是现在已弃用,那么我如何在应用中使用 Audio Focus 以使其适用于低于 API 26 的 API 级别以及更高的 API 级别?

  1. audioFocusRequest = new AudioFocusRequest.Builder(AudioManager.AUdioFOCUS_GAIN)
  2. .setonAudioFocuschangelistener(audioFocuschangelistener)
  3. .setFocusGain(AudioManager.AUdioFOCUS_GAIN)
  4. .build();

这段代码不适用于低于 26 的 API 级别并给出此错误消息,

“调用需要 API 级别 26(当前最小值为 22):新的 android.media.AudioFocusRequest.Builder”

解决方法

Check the API level at runtime 选择使用 requestAudioFocus() 还是 AudioFocusRequest.Builder

  1. if (Build.VERSION.SDK_INT >= 26) {
  2. // Use AudioFocusRequest.Builder
  3. } else {
  4. // Use requestAudioFocus
  5. }

这应该会使您收到的错误和 IDE 中的弃用消息都清除。

docker 部署 elasticsearch + elasticsearch-head + elasticsearch-head 跨域问题 + IK 分词器

docker 部署 elasticsearch + elasticsearch-head + elasticsearch-head 跨域问题 + IK 分词器

0.  docker pull 拉取 elasticsearch + elasticsearch-head 镜像


 

1.  启动 elasticsearch Docker 镜像

docker run -di --name tensquare_elasticsearch -p 9200:9200 -p 9300:9300 elasticsearch

对应 IP:9200 ---- 反馈下边 json 数据,表示启动成功


 

2.  启动 elasticsearch-head 镜像

docker run -d -p 9100:9100 elasticsearch-head

 

对应 IP:9100 ---- 得到下边页面,即启动成功

 


 

3.  解决跨域问题

 

   进入 elasticsearch-head 页面,出现灰色未连接状态 , 即出现跨域问题

 

     1. 根据 docker ps 得到 elasticsearch 的 CONTAINER ID

   2. docker exec -it elasticsearch 的 CONTAINER ID  /bin/bash 进入容器内

     3. cd ./config 

     4. 修改 elasticsearch.yml 文件

echo "
http.cors.enabled: true
http.cors.allow-origin: ''*''" >> elasticsearch.yml

 


 

4.  重启 elasticsearch

docker restart elasticsearch的CONTAINER ID

重新进入 IP:9100 进入 elasticsearch-head, 出现绿色标注,配置成功 !

 

 


 

5.  ik 分词器的安装

  将在 ik 所在的文件夹下,拷贝到 /usr/share/elasticsearch/plugins  ---  注意: elasticsearch 的版本号必须与 ik 分词器的版本号一致

docker cp ik elasticsearch的CONTAINER ID:/usr/share/elasticsearch/plugins
重启elasticsearch
docker restart elasticsearch

未添加ik分词器:http://IP:9200/_analyze?analyzer=chinese&pretty=true&text=我爱中国
添加ik分词器后:http://IP:9200/_analyze?analyzer=ik_smart&pretty=true&text=我爱中国

ElasticSearch (一) ElasticSearch 的应用场景及为什么要选择 ElasticSearch?

ElasticSearch (一) ElasticSearch 的应用场景及为什么要选择 ElasticSearch?

先了解一下数据的分类

结构化数据
又可以称之为行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据。其实就是可以能够用数据或者统一的结构加以表示的数据。比如在数据表存储商品的库存,可以用整型表示,存储价格可以用浮点型表示,再比如给用户存储性别,可以用枚举表示,这都是结构化数据。

非结构化数据
无法用数字或者统一的结构表示的数据,称之为飞结构化数据。如:文本、图像、声音、网页。
其实结构化数据又数据非结构化数据。商品标题、描述、文章描述都是文本,其实文本就是非结构化数据。那么就可以说非结构化数据即为全文数据。

什么是全文检索?

一种将文件或者数据库中所有文本与检索项相匹配的文字资料检索方法,称之为全文检索。

全文检索的两种方法

顺序扫描法:将数据表的所有数据逐个扫描,再对文字描述扫描,符合条件的筛选出来,非常慢!
索引扫描法:全文检索的基本思路,也就是将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对快的目的。

全文检索的过程:
先索引的创建,然后索引搜索

为什么要选择用 ElasticSearch?

全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。
Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。
分布式的实时文件存储,每个字段都被索引可被搜索。
分布式的实时分析搜索引擎。
可以扩展到上百台服务器,处理 PB 级别结构化或者非结构化数据。
所有功能集成在一个服务器里,可以通过 RESTful API、各种语言的客户端甚至命令与之交互。
上手容易,提供了很多合理的缺省值,开箱即用,学习成本低。
可以免费下载、使用和修改。
配置灵活,比 Sphinx 灵活的多。

今天关于PHP 如何使用 Elasticsearch 的 索引 API 接口elasticsearch php怎么用的讲解已经结束,谢谢您的阅读,如果想了解更多关于Apifox:API 文档、API 调试、API Mock、API 自动化测试一体化协作平台、AudioFocusRequest.Builder() 需要 API 级别 26,但我想在 API 级别 22 上使用它,有什么方法可以在低于 API 26 的 API 级别上使用它吗?、docker 部署 elasticsearch + elasticsearch-head + elasticsearch-head 跨域问题 + IK 分词器、ElasticSearch (一) ElasticSearch 的应用场景及为什么要选择 ElasticSearch?的相关知识,请在本站搜索。

本文标签: