• elasticsearch 简单使用【php版本】


    版本说明

    {
      "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"
            }
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 进行操作时,新建es对象
    use Elastic\Elasticsearch\ClientBuilder;
    $client = ClientBuilder::create() ->setHosts(['localhost:9200']) ->build();
    
    • 1
    • 2

    一些查询操作

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

    获取mapping结构

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

    批量批量插入数据

    //$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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    删除文档数据

    $delete_params = [
        'index' => 'goods',
        'body' => [
            'query' => [
                'range' => [
                    'id' => [
                    	//删除id > 1的文档记录
                        'gte' =>1
                    ]
                ]
            ]
    
        ]
    ];
    $responses = $client->deleteByQuery($delete_params);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    查询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();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    模糊查询之wildcard、前缀查询

    $params = [
        'index' => 'goods',
        'body'  => [
            'query' => [
            //wildcard会对查询条件进行分词,后面可以接* ? 通配符进行匹配
            // prefix前缀匹配,匹配到分词中以设置的关键词开头的分词
    //            'wildcard' => [
                'prefix' => [
                    'brand' => '星'
                ]
            ]
        ],
        'from' => 0,
        'size' => 20
    ];
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    范围查询

    $params = [
        'index' => 'goods',
        'body'  => [
            'query' => [
                'range' => [
                    'sort' => [
                        'gte' => 10,
                        'lte' => 100,
                    ]
                ]
            ]
        ],
        'from' => 0,
        'size' => 20
    ];
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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
    ];
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

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

    $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
    ];
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

  • 相关阅读:
    ping&icmp
    sql注入学习-知识点大合集
    Linux第70步_新字符设备驱动的一般模板
    【Leetcode每日一题:1662.检查俩个字符串数组是否相等~~~遍历+模拟+StringBuilder】
    写个俄罗斯方块,感受嵌入式linux应用开发
    Jenkins Windons下安装ChangeLog插件获取Git更新日志
    重写SpringCloudGateway路由查找算法,性能提升100倍!
    昨天步行的思考
    求告知!该如何解决这个问题
    LeetCode 1337. The K Weakest Rows in a Matrix【数组,二分,堆,快速选择,排序】1224
  • 原文地址:https://blog.csdn.net/u010242979/article/details/128107439