当前位置: 代码网 > it编程>编程语言>其他编程 > php操作elasticsearch

php操作elasticsearch

2024年08月04日 其他编程 我要评论
## elasticsearch 客户端 ### 简介 本客户端旨在降低elasticsearch的上手难度,依赖于官方的客户端插件`elasticsearch/elasticsearch`。直接使用官方客户端需要手动构建复杂的请求体, 稍微有一点错误,操作结果就不对。所以单独构建一个依赖官方客户端的插件,用户只需要传入关键字即可,后面增加了类似于关系型数据库 的链式操作方法,用起来更简单一些。当然,本插件只能满足一些常用的功能需求,较为复杂的需求仍然需要手动...

elasticsearch 客户端

简介

     本客户端旨在降低elasticsearch的上手难度,依赖于官方的客户端插件elasticsearch/elasticsearch。直接使用官方客户端需要手动构建复杂的请求体, 稍微有一点错误,操作结果就不对。所以单独构建一个依赖官方客户端的插件,用户只需要传入关键字即可,后面增加了类似于关系型数据库 的链式操作方法,用起来更简单一些。当然,本插件只能满足一些常用的功能需求,较为复杂的需求仍然需要手动构建请求体,你可以使用本插件 直接调用官方客户端的方法。

客户端安装方法

composer require xiaosongshu/elasticsearch

elasticsearch服务配置

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.17.7

关于ik分词器

参考 加入ik分词器的方法:https://blog.csdn.net/weixin_44364444/article/details/125758975

基本配置

支持thinkphp,laravel,webman等常用框架,需要创建配置文件elasticsearch.php ,放到config/目录下。 配置内容如下所示:

return [
   /** 节点列表 */
   'nodes' => ['127.0.0.1:9200'],
   /** 用户名 */
   'username'=>'',
   /** 密码 */
   'password'=>'',
];

基本用法

实例化客户端

$client = new \xiaosongshu\elasticsearch\esclient();

使用方法


<!--?php
require_once 'vendor/autoload.php';

/** 实例化客户端 elasticsearch链式操作演示 */
$client = new \xiaosongshu\elasticsearch\esclient([
    /** 节点列表 */
    'nodes' =--> ['192.168.101.170:9200'],
    /** 用户名 */
    'username' =&gt; '',
    /** 密码 */
    'password' =&gt; '',
]);

/** 获取表结构 */
$result = $client-&gt;getmap(['index']);

/** 删除索引 */
$client-&gt;deleteindex('index');
/** 如果不存在index索引,则创建index索引 */
if (!$client-&gt;indexexists('index')) {
    /** 创建索引 */
    $client-&gt;createindex('index', '_doc');
}
/** 创建表 */
$result = $client-&gt;createmappings('index', '_doc', [
    'id' =&gt; ['type' =&gt; 'long',],
    'title' =&gt; ['type' =&gt; 'text', "fielddata" =&gt; true,],
    'content' =&gt; ['type' =&gt; 'text', 'fielddata' =&gt; true],
    'create_time' =&gt; ['type' =&gt; 'text'],
    'test_a' =&gt; ["type" =&gt; "integer"],
    'test_b' =&gt; ["type" =&gt; "rank_feature", "positive_score_impact" =&gt; false],
    'test_c' =&gt; ["type" =&gt; "rank_feature"],
    'name' =&gt; ['type' =&gt; 'text', "fielddata" =&gt; true,],
    'age' =&gt; ['type' =&gt; 'integer'],
    'sex' =&gt; ['type' =&gt; 'integer'],
]);

/** 批量插入数据链式操作 */
$result = $client-&gt;table('index', '_doc')-&gt;insertall([
    [
        'id' =&gt; rand(1, 99999),
        'title' =&gt; '天有不测风云',
        'content' =&gt; '月有阴晴圆缺',
        'create_time' =&gt; date('y-m-d h:i:s'),
        'test_a' =&gt; rand(1, 10),
        'test_b' =&gt; rand(1, 10),
        'test_c' =&gt; rand(1, 10),
        'name' =&gt; '张三',
        'age' =&gt; 27,
        'sex' =&gt; 1
    ]
]);
/** 调用elasticsearch原生方法 */
$params = [
    'index' =&gt; 'my_index',
    'type' =&gt;"_doc",
    'id' =&gt; "demo",
];
/** 使用原生方法统计满足某条件的数据 */
$result = $client-&gt;count($params);
/** 使用原生方法判断是否存在某一条数据 */
$result = $client-&gt;exists($params);

/** 查询数据链式操作 */
$result = $client
    /** 设置表名 */
    -&gt;table('index','_doc')
    /** must限制条件 */
    -&gt;where(['title','=','测试'])
    /** wherein查询 */
    -&gt;wherein('age',[28])
    /** wherenotin查询 */
    -&gt;wherenotin('age',[27,29])
    /** should限制条件 当must和should冲突的时候,must条件优先 */
    -&gt;orwhere(['test_a','&gt;',8])
    /** 排序 */
    -&gt;orderby('test_a','asc')
    /** 分页 */
    -&gt;limit(0,10)
    /** 筛选查询字段 */
    -&gt;select(['name','age'])
    /** 按字段分组 */
    -&gt;groupby(['age','sex'])
    /** 聚合查询 */
    -&gt;sum(['age'])
    /** 执行查询操作 */
    -&gt;getall();

/** 聚合查询链式操作 */
$result = $client-&gt;table('index','_doc')-&gt;max(['age'])-&gt;getall();
/** 获取所有数据 */
$result = $client-&gt;table('index','_doc')-&gt;getall();

/** 根据条件更新所有数据链式操作 */
$result = $client-&gt;table('index','_doc')-&gt;where(['test_a','&gt;',2])-&gt;updateall(['name'=&gt;'陈圆圆']);
/** 根据条件删除数据链式操作 */
$result = $client-&gt;table('index','_doc')-&gt;where(['test_a','&gt;',2])-&gt;deleteall();
/** 获取所有的index索引 */
$result = $client-&gt;getindex(['index']);
/** 使用id更新数据 */
$result = $client-&gt;table('index','_doc')-&gt;updatebyid('kmxadjebegxaj580qqp6',['content'=&gt;'今天你测试了吗']);
/** 使用id 删除数据 */
$result = $client-&gt;table('index','_doc')-&gt;deletebyids(['kmxadjebegxaj580qqp6']);
/** 使用id查询数据 */
$result = $client-&gt;table('index','_doc')-&gt;findbyid('kmxadjebegxaj580qqp6');
/** 使用id批量查询 */
$result = $client-&gt;table('index','_doc')-&gt;getbyids(['kmxadjebegxaj580qqp6']);
/** 添加脚本 */
$script = &lt;&lt;<eof if (doc.containskey('content') && doc['content'].size() !="0)" { return doc['content.raw'].value + '_' '谁不说按家乡好'; } else '字段缺失'; 或者返回其他适当的默认值 eof; $result="$client-">addscript('update_content',$script);
/** 添加脚本 */
$result = $client-&gt;addscript('update_content2',"(doc['content'].value)+'_'+'abcdefg'");
/** 获取脚本内容 */
$result = $client-&gt;getscript('update_content');
/** 使用脚本查询 */
$result = $client-&gt;table('index','_doc')-&gt;withscript('update_content11')-&gt;getall();
/** 删除脚本*/
$result = $client-&gt;deletescript('update_content');
/** 原生查询 */
$result = $client-&gt;query([
    'index'=&gt;'index',
    'type'=&gt;'_doc',
    'body'=&gt;[
        'query'=&gt;[
            'bool'=&gt;[
                'must'=&gt;[
                    [
                        'match_phrase'=&gt;[
                            'title'=&gt;'风云'
                        ],
                    ],
                    [
                        'script'=&gt;[
                            'script'=&gt;"doc['content'].size() != 0"
                        ]
                    ]
                ]
            ]
        ]
    ]
]);
/** 打印处理 结果*/
print_r($result);

测试

 php ./vendor/bin/phpunit -c phpunit.xml

</eof>

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com