Elasticsearch-PHP 基础使用方式
一,安装Elasticsearch-PHP
- 首先安装Composer,参考:参考博客
- 在文件夹中新建文件composer.json,写入以下内容:
{ "require": { "elasticsearch/elasticsearch": "~6.0" } }
- 保存后在同级目录下执行命令:
composer install --no-dev
即可获得Elasticsearch-PHP工具包
- 如图:
根目录内容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
- 小于;gtelte
- 小于或等于 -
游标分页+指定多索引搜索:
$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, '搜索文档');
欢迎转载,转载时请注明来源。