文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

elasticsearch 简单使用【php版本】

2023-09-15 14:46

关注

版本说明

{  "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"        }      }    }  }}
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' => '',                    'post_tags' => '',                ]            ]        ]    ],    'from' => 0,    'size' => 30];

来源地址:https://blog.csdn.net/u010242979/article/details/128107439

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯