Elasticsearch-PHP 基础使用方式


一,安装Elasticsearch-PHP

  1. 首先安装Composer,参考:参考博客
  2. 在文件夹中新建文件composer.json,写入以下内容:
    {
        "require": {
            "elasticsearch/elasticsearch": "~6.0"
        }
    }

     

  3. 保存后在同级目录下执行命令:
    composer install --no-dev

    即可获得Elasticsearch-PHP工具包

  4. 如图:
    根目录内容

     

    vendor下层内容:

      


 

二,基础使用

  • 直接上代码:
    <?php
    require './elasticsearch/vendor/autoload.php';
    
    try
    {
        // 连接Elasticsearch
        $hosts = ['192.168.1.1:9200'];
        $client = Elasticsearch\ClientBuilder::create() -> setHosts($hosts) -> build();
        
        $params =
        [
            'index' => 'xmsb_index'
        ];
        
        // 创建索引
        $response = $client -> indices() -> create($params);
        showElshres($response, '创建索引');
        
        // 查看所有索引
        $response = $client -> indices() -> getMapping();
        showElshres($response, '查看所有索引');
        
        // 删除索引
        $response = $client -> indices() -> delete($params);
        showElshres($response, '删除索引');
        
        // 创建或更新文档(根据ID是否存在判断添加或更新)
        $params =
        [
            'index' => 'xmsb_index',
            'type' => 'normal',
            'id' => 1,
            'body' =>
            [
                'id' => 1,
                'group' => '蜀',
                'name' => '刘备',
                'info' => <<<xmsb
    汉昭烈帝刘备(161年-223年6月10日),字玄德,涿郡涿县(今河北省涿州市大树楼桑村) [128]  人,西汉中山靖王刘胜之后,蜀汉开国皇帝、政治家。史家多称其为先主。
    刘备少年时拜卢植为师,而后参与镇压黄巾起义、讨伐董卓等活动。因为自身实力有限,刘备在诸侯混战过程中屡遭失败,先后依附公孙瓒、陶谦、曹操、袁绍、刘表等多个诸侯。但因其始终坚持以德服人的行为准则,受到了海内外名士的尊敬,至有陶谦、刘表等放弃让自己的儿子继承基业,而是选择将自己的领地徐州、荆州让给刘备统领。
    通过坚持不懈的努力,刘备于赤壁之战后,先后拿下荆州、益州,建立了蜀汉政权。而后因为关羽被东吴所害,刘备不听群臣劝阻,执意发动对吴国的战争,结果兵败夷陵,最终于章武三年(223年)病逝于白帝城,终年六十三岁,谥号昭烈皇帝,《晋书·王弥传》称之为烈祖 [1]  ,葬惠陵。
    刘备弘毅宽厚,知人待士,百折不挠,其临死前举国托付给诸葛亮的行为被陈寿赞为“古今之盛轨” [2]  ,后世众多文艺作品以刘备为主角。成都武侯祠有汉昭烈庙为之纪念。
    xmsb
            ]
        ];
        $response = $client -> index($params);
        showElshres($response, '创建或更新文档');
        
        // 批量创建或更新文档(根据ID是否存在判断添加或更新)
        $datas =
        [
            [
                'id' => 2,
                'group' => '蜀',
                'name' => '诸葛亮',
                'info' => <<<xmsb
    诸葛亮(181年—234年10月8日 [1]  ),字孔明,号卧龙,琅琊阳都(今山东省临沂市沂南县)人 [144]  ,三国时期蜀汉丞相,中国古代杰出的政治家、军事家、发明家、文学家。
    诸葛亮早年随叔父诸葛玄到荆州,诸葛玄死后,诸葛亮就在隆中隐居。 [2-5]  刘备依附荆州刘表时三顾茅庐,诸葛亮向刘备提出占据荆州、益州,联合孙权共同对抗曹操的“隆中对”策,刘备根据诸葛亮的策略,成功建立蜀汉政权,与孙权、曹操形成三足鼎立之势。章武元年(221年),刘备称帝,任命诸葛亮为丞相,伐吴失败后,刘备于永安举国托付于诸葛亮。刘禅继位后,封诸葛亮为武乡侯,领益州牧。勤勉谨慎,大小政事必亲自处理,赏罚严明;与东吴联盟,改善和西南各族的关系;实行屯田政策,加强战备。前后五次北伐中原,未能实现兴复汉室的目标。终因积劳成疾,于建兴十二年(234年)病逝于五丈原(今陕西省宝鸡市岐山境内),享年五十四岁 [6]  。后主刘禅追谥为忠武侯,后世常以武侯尊称。东晋桓温追封为武兴王。 [7] 
    诸葛亮散文代表作有《出师表》《诫子书》等。曾发明木牛流马、孔明灯等,并改造连弩,叫做诸葛连弩,可一弩十矢俱发。诸葛亮一生“鞠躬尽瘁,死而后已”,是中国传统文化中忠臣与智者的代表人物。
    xmsb
            ],
            [
                'id' => 3,
                'group' => '蜀',
                'name' => '赵云',
                'info' => <<<xmsb
    赵云(?-229年),字子龙,常山真定人。身长八尺,姿颜雄伟,汉末三国时期蜀汉名将,与关羽、张飞并称“燕南三士”。 [85] 
    汉末军阀混战,赵云受本郡推举,率领义从加入公孙瓒。期间结识了汉室皇亲刘备,但不久之后,赵云因为兄长去世而离开。赵云离开公孙瓒大约七年后,在邺城与刘备相见,从此追随刘备。
    赵云跟随刘备将近三十年,先后参加过博望坡之战、长坂坡之战、江南平定战,独自指挥过入川之战、汉水之战、箕谷之战,都取得了非常好的战果。除了四处征战,赵云还先后以偏将军任桂阳太守,以留营司马留守公安,以翊军将军督江州。除此之外,赵云于平定益州时引霍去病故事劝谏刘备将田宅归还百姓,又于关羽、张飞被害之后劝谏刘备不要伐吴,被后世赞为有大臣局量的儒将,甚至被认为是三国时期的完美人物 。
    赵云去世后,于蜀汉景耀四年(261年)被追谥为“顺平侯”,其“常胜将军”的形象在后世被广为流传。
    xmsb
            ],
            [
                'id' => 4,
                'group' => '魏',
                'name' => '曹操',
                'info' => <<<xmsb
    魏武帝曹操(155年 [1]  —220年3月15日 [2]  ),字孟德,一名吉利,小字阿瞒 [164]  ,一说本姓夏侯 [169]  ,沛国谯县(今安徽省亳州市)人 [3-4]  。中国古代杰出的政治家、军事家、文学家、书法家、诗人 [5-6]  。东汉末年权相,太尉曹嵩之子,曹魏的奠基者。
    曹操少年机警,任侠放荡,不治行业。二十岁时,举孝廉为郎,授洛阳北部尉。后任骑都尉,参与镇压黄巾军。迁济南相,奏免贪吏,禁断淫祀。征为东郡太守,不就,称疾归家。及董卓擅政,乃散家财起兵,与袁绍等共讨董卓。初平三年(192年)据兖州,分化诱降黄巾军三十余万,选其精锐编为青州军,自此兵力大振,先后击败袁术、陶谦、吕布等部。建安元年(196年),迎汉献帝至许(今河南许昌东),自为司空,行车骑将军事,总揽朝政。建安五年(200年),在官渡之战中大败袁绍主力,又先后削平袁尚、袁谭等势力。建安十二年(207年),击破乌桓,统一北方。建安十三年(208年),进位丞相。同年进攻荆州,与孙权、刘备联军展开赤壁之战,败归。建安十八年(213年),封魏公。建安二十年(215年),征张鲁,取汉中。次年进爵为魏王。建安二十五年(220年),病死于洛阳,享年六十六岁 [166-167]  。儿子曹丕代汉称帝后,追尊曹操为太祖武皇帝 [92]  [138]  ,葬于高陵。
    曹操善诗文,知兵法,开建安文风。有诗文多篇。另有注《孙子》传世。今人整理其诗文成排印本《曹操集》。 [138]  同时亦擅长书法,被唐朝张怀瓘《书断》评为“妙品”。
    xmsb
            ],
            [
                'id' => 5,
                'group' => '魏',
                'name' => '司马懿',
                'info' => <<<xmsb
    司马懿(179年-251年9月7日 [1]  ),字仲达,河内郡温县孝敬里(今河南省焦作市温县)人。三国时期曹魏政治家、军事谋略家、权臣,西晋王朝的奠基人之一。
    司马懿自幼聪明多大略,博学洽闻,伏膺儒教。因汉室被曹氏所控制,司马懿一度拒绝曹操授予的官职,但建安十三年(208年),曹操任丞相后,强行辟司马懿为文学掾。因司马懿曾支持曹操称帝,所以逐渐赢得了曹操的信任。曹操封魏王后,以司马懿为太子中庶子以佐助曹丕,帮助曹丕在储位之争中获得胜利。曹丕临终时,令司马懿与曹真等为辅政大臣,辅佐魏明帝曹叡。明帝时,司马懿屡迁抚军大将军、大将军、太尉等重职。明帝崩,托孤幼帝曹芳于司马懿和曹爽。曹芳继位后,司马懿遭到曹爽排挤,升官为无实权的太傅。正始十年(249年),司马懿趁曹爽陪曹芳离洛阳至高平陵祭陵,起兵政变并控制京都洛阳。自此,曹魏的军政权力落入司马氏手中,史称高平陵事变。司马懿善谋奇策,多次征伐有功,曾率军擒斩孟达,两次率大军成功抵御诸葛亮北伐,远征平定辽东。对屯田、水利等农耕经济发展有重要贡献。
    嘉平三年(251年),司马懿病逝,享年七十三岁,辞郡公和殊礼,葬于首阳山,谥号宣文。其次子司马昭封晋王后,追谥司马懿为宣王;其孙司马炎称帝后,追尊司马懿为宣皇帝,庙号高祖。 [2]
    xmsb
            ],
            [
                'id' => 6,
                'group' => '魏',
                'name' => '张辽',
                'info' => <<<xmsb
    张辽(169年~222年),字文远,雁门马邑(今山西省朔州市)人。汉末三国时期曹魏名将,聂壹的后人。
    起初,担任雁门郡吏。又先后跟随丁原、何进、董卓、吕布,恪尽职守,历尽坎坷。吕布败亡后,张辽归属曹操。此后,立下众多显赫的功勋。洞察敌情而劝降昌豨。攻袁氏而转战河北。在白狼山之战率领先锋大破乌桓并斩杀乌桓单于蹋顿。驱逐辽东大将柳毅。以静制动平定军中谋反。进军江淮击灭陈兰、梅成。此后,长期镇守合肥。
    建安二十年(215年),合肥之战,张辽率领八百将士 [1]  ,袭击东吴十万大军 [2]  ,一直冲杀到孙权的主帅旗下 [3]  ,令东吴军队皆披靡 [4]  。在东吴撤军时,张辽率领追兵,大破孙权、甘宁、凌统等 [5]  ,差点活捉孙权 [6]  。经此一役,张辽威震江东。 “张辽止啼”成为流传千古的典故 [7]  。
    黄初元年(220年),张辽进封晋阳侯。染病之后,依旧令孙权非常忌惮。黄初三年(222年),张辽抱病击破吴将吕范。同年,病逝于江都,谥曰刚侯。张辽为历代所推崇,成为古今六十四名将之一。
    xmsb
            ],
            [
                'id' => 7,
                'group' => '吴',
                'name' => '孙权',
                'info' => <<<xmsb
    吴大帝孙权(182年-252年5月21日),字仲谋,吴郡富春县(今浙江省杭州市富阳区)人。三国时期孙吴开国皇帝(229年-252年5月21日在位)、政治家 [116]  、军事统帅。 [1]  [117] 
    孙权的父亲孙坚和兄长孙策,在东汉末年群雄割据中打下了江东基业。建安五年(200年),孙策遇刺身亡,孙权继任掌事,被曹操表为讨虏将军,领会稽太守。又得张昭、周瑜等委心服事,乃招延俊秀,聘求名士,分部诸将,镇抚山越,征讨反抗势力。建安十三年(208年),曹操占有荆州,挥兵南下。议者多劝迎操,惟周瑜、鲁肃坚决主战,遂与刘备联军大破操军于赤壁。 [115]  建安二十四年(219年),派吕蒙成功袭取荆州,使领土面积大增。
    黄武元年(222年),孙权被魏文帝曹丕册封为吴王,建立吴国。同年,在夷陵之战中大败刘备。黄龙元年(229年),在武昌正式称帝,国号吴,不久后迁都建业。孙权称帝后,设置农官,实行屯田,设置郡县,并继续剿抚山越,促进了江南经济的发展。黄龙二年(230年),派将军卫温、诸葛直抵达夷州(今台湾)。
    孙权晚年在继承人问题上反复无常,引致群下党争,朝局不稳。于神凤元年(252年)病逝,享年七十一岁,在位二十四年,葬于蒋陵。谥号大皇帝,庙号太祖。 [1] 
    孙权亦善书,唐代张怀瓘在《书估》中将其书法列为第三等。
    xmsb
            ],
            [
                'id' => 8,
                'group' => '吴',
                'name' => '周瑜',
                'info' => <<<xmsb
    周瑜(175年-210年),字公瑾,庐江舒县(今安徽庐江县西南)人 [110]  。东汉末年军事家 [72]  [74]  、政治家 [110]  、谋略家 [75]  、东吴名将 [68]  。出身庐江周氏 [163]  ,洛阳令周异之子,从祖周景、从父周忠,都官至太尉 [115]  ,位列三公 [110]  。周瑜身材高大,容貌俊美 [144]  ,精音律,当时有“曲有误周郎顾”之语 [143]  。
    周瑜少与孙策交好 [69]  ,兴平二年,助孙策于曲阿之战中击败刘繇 [3]  。建安三年起随孙策平定江东 [6]  。建安五年,孙策遇刺身亡 [12]  ,孙权继任,周瑜将兵赴丧,以中护军的身份与长史张昭共掌众事。建安七年,曹操责权送质,周瑜谏阻纳质 [15]  ,建议孙权占据江南,拥兵观变 [73]  ,确立了割据江东、独立建国的战略方针 [162]  。建安十三年,曹军兵临江东,周瑜分析曹操兵行四患,力主抗曹 [21]  ,并亲率吴军,以火攻大败曹军于赤壁 [146]  。赤壁之战是中国历史上著名的以少胜多的战役之一,此役奠定了汉末“三分天下”的基础。建安十四年 [166]  ,周瑜又率军于南郡之战中大破曹仁、徐晃联军 [76]  [132]  ,成功夺取军事重镇江陵 [157]  ,拜偏将军领南郡太守。建安十五年提出“取蜀,并张鲁,联马超,再以襄阳为根据地蚕食曹操,北方可图”的战略 [27]  。在整装取蜀途中病逝于巴丘,年仅三十六岁 [147]  。
    正史上周瑜“性度恢廓”、“雅量高致”、“实奇才也”,他文武兼备,有雄才大略 [78]  ,是东吴势力取得军事成功和割据地位的主要功臣之一。被赞誉为“世间豪杰英雄士,江左风流美丈夫”。
    xmsb
            ],
            [
                'id' => 9,
                'group' => '吴',
                'name' => '陆逊',
                'info' => <<<xmsb
    陆逊(183年-245年3月19日),本名陆议,字伯言,吴郡吴县人。三国时期吴国政治家、军事家。
    出身吴郡陆氏。东汉建安八年(203年),入孙权幕府,历任海昌屯田都尉、定威校尉、帐下右部督。建安二十四年(219年),陆逊参与袭取荆州。黄初三年(222年),孙权命陆逊为东吴大都督,在夷陵之战中火烧连营击败刘备,领荆州牧 [93]  。黄武七年(228年),陆逊取得石亭之战的胜利。黄龙元年(229年),孙权称帝后,以陆逊为上大将军、右都护,辅佐太子孙登并掌管陪都武昌事宜。赤乌七年(244年)拜为丞相、总领三公事务,领武昌事。孙和、孙霸“二宫之争”时卷入孙权父子相争中,次年去世,终年六十三岁,追谥“昭”。
    陆逊跟随孙权四十余年,统领吴国军政二十余年。其为人深谋远虑,忠诚耿直。一生出将入相,被赞为“社稷之臣”。
    xmsb
            ],
        ];
        
        $params = [];
        
        foreach($datas as $data)
        {
            $params['body'][] =
            [
                'index' =>
                [
                    '_index' => 'xmsb_index',
                    '_type' => 'normal',
                    '_id' => $data['id']
                ]
            ];
            
            $params['body'][] = $data;
        }
        
        $responses = $client -> bulk($params);
        showElshres($response, '批量创建或更新文档');
    
      // 删除文档
        $params =
        [
            'index' => 'xmsb_index',
            'type' => 'normal',
            'id' => 1
        ];
        $response = $client -> delete($params);
        showElshres($response, '删除文档');
    }
    catch(Exception $e)
    {
        showElshres($e -> getMessage(), '报错');
    }
    
    function showElshres($response, $reason)
    {
        if(is_string($response))
        {
            $response = json_decode($response, true);
        }
        
        echo "<pre>";
        print_r($reason . "\n");
        print_r($response);
        print_r("================================");
    }

     

  • 基础搜索:
    $params =
    [
        'index' => 'xmsb_index',
        'body' =>
        [
            'query' =>
            [
                'bool' =>
                [
                    'must' =>
                    [
                        ['match' => ['info' => '诸葛亮']],
                    ]
                ]
            ]
        ]
    ];
    $response = $client -> search($params);
    showElshres($response, '搜索文档');

     

  • 或条件搜索:
    $params =
    [
        'body' =>
        [
            'query' =>
            [
                'bool' =>
                [
                    'should' =>
                    [
                        ['match' => ['info' => '诸葛亮']],
                        ['match' => ['info' => '司马懿']],
                    ]
                ]
            ]
        ]
    ];
    $response = $client -> search($params);
    showElshres($response, '搜索文档');

     

  • 精确搜索:
    $params =
    [
        'body' =>
        [
            'query' =>
            [
                'bool' =>
                [
                    'must' =>
                    [
                        ['match' => ['group.keyword' => '蜀']],
                    ]
                ]
            ]
        ]
    ];
    $response = $client -> search($params);
    showElshres($response, '搜索文档');

     

  • 短句匹配搜索:
    $params =
    [
        'body' =>
        [
            'query' =>
            [
                'bool' =>
                [
                    'must' =>
                    [
                        ['match_phrase' => ['info' => '古今六十四名将']],
                    ]
                ]
            ]
        ]
    ];
    $response = $client -> search($params);
    showElshres($response, '搜索文档');

     

  • 数字区间搜索+结果排序:
    $params =
    [
        'body' =>
        [
            'query' =>
            [
                'bool' =>
                [
                    'must' =>
                    [
                        ['range' => ['id' => ['gte' => 1, 'lte' => 50]]]
                    ]
                ]
            ],
            'sort' =>
            [
                ['id' => ['order' => 'desc']]
            ]
        ],
    ];
    $response = $client -> search($params);
    showElshres($response, '搜索文档');

    注:gt - 大于;lt - 小于;gte - 大于或等于;lte - 小于或等于

     

  • 游标分页+指定多索引搜索:

    $params =
    [
        'index' => 'xmsb_index,xmsb_index2',
        'scroll' => '1s',
        'size' => '1'
    ];
    $response = $client -> search($params);
    $scroll_id = $response['_scroll_id'];
    $finalRes = $response['hits']['hits'];
    
    while(1 == 1)
    {
        $response = $client -> scroll(['scroll_id' => $scroll_id, 'scroll' => '1s']);
        
        if(!empty($response['hits']['hits']))
        {
            $finalRes = array_merge($finalRes, $response['hits']['hits']);
        }
        else
        {
            showElshres($finalRes, '搜索文档');
            break;
        }
    }

     

  • 单字段多条件in查询:

    $params =
    [
        'index' => 'xmsb_index',
        'type' => 'normal',
        'body' =>
        [
            'query' =>
            [
                'bool' =>
                [
                    'must' =>
                    [
                        'terms' =>
                        [
                            'group' => ['魏', '吴']
                        ]
                    ]
                ]
            ]
        ]
    ];
    $response = $client -> search($params);
    showElshres($response, '搜索文档');

     

     

     

     

posted @ 2022-07-16 15:05  何效名  阅读(325)  评论(0编辑  收藏  举报