elasticsearch 安装与使用教程

linux下es安装

https://blog.csdn.net/yjclsx/article/details/81302041

不使用root帐户开启elasticsearch软件啊啊

elasticsearch所在目录进行授权 chmod -R 777 elasticsearch-6.2.4

bin/elasticsearch -d

es安装出现问题

OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N

在虚拟机的设置中,将处理器的处理器核心数量改成2,重新执行启动命令后,能够正常运行。若还是未能执行成功,可进一步将处理器数量也改成2.


远程连接修改配置文件 config/elasticsearch.yml

network.bind_host: 0.0.0.0

cluster.name: elastic-cluster

network.host: 0.0.0.0

discovery.zen.minimum_master_nodes: 1

bootstrap.memory_lock: true

discovery.type: single-node

http.cors.enabled: true

http.cors.allow-origin: "*"

Elasticsearch 是目前流行的大数据处理框架之一,详细的说明可以自行百度等.

以下文章采用es缩写作为代表Elasticsearch

es有官方的php api接口,可以采用github下载或者composer.

1.创建索引($client->indices()->create())

$params = ['index'=>'user_index',//索引名(相当于mysql的数据库)'body'=> ['mappings'=> ['normal_type'=> [//类型名(相当于mysql的表)'_all'=>[//  是否开启所有字段的检索'enabled'=>'false'],'properties'=> [//文档类型设置(相当于mysql的数据类型)'uid'=> ['type'=>'integer'// 字段类型为整型],'username'=> ['type'=>'keyword'// 字段类型为关键字,如果需要全文检索,则修改为text,注意keyword字段为整体查询,不能作为模糊搜索],'platform'=> ['type'=>'keyword'],'mobile'=> ['type'=>'integer'],'sex'=> ['type'=>'integer'],'source'=> ['type'=>'keyword'],'province'=> ['type'=>'keyword'],'city'=> ['type'=>'keyword'],'tag'=>  ['properties'=>  ['tagName'=>['type'=>'text'],'tagWeight'=> ['type'=>'integer',                                    ]                                ]                            ],                            ]                        ]                    ]                ]            ];            $data = $client->indices()->create($params);

简单的索引就创建完毕了,现在我们可以获取下刚创建的索引信息.

2.获取索引信息

2.1 获取索引信息($client->indices()->getSettings())

$params = ['index'=>'user_index','client'=> ['ignore'=>404]            ];    $res = $client->indices()->getSettings($params);//获取库索引设置信息

返回的结果如下:

array('user_index'=>array('settings'=>array('index'=>array('creation_date'=>'1498116455327','number_of_shards'=>'5','number_of_replicas'=>'1','uuid'=>'8pkONoI7RAuw5HjnFa4UaQ','version'=>array('created'=>'5020299',        ),'provided_name'=>'user_index',        ),      ),    ), )

2.2 获取Mapping信息

接口:$client->indices()->getMapping

$params = ['index'=>'user_index','client'=> ['ignore'=>404]            ];$res = $client->indices()->getMapping($params);//获取mapping信息

返回的结果如下:

array('user_index'=>array('mappings'=>array('normal_type'=>array('_all'=>array('enabled'=>false,        ),'properties'=>array('city'=>array('type'=>'keyword',          ),'mobile'=>array('type'=>'integer',          ),'platform'=>array('type'=>'keyword',          ),'province'=>array('type'=>'keyword',          ),'sex'=>array('type'=>'integer',          ),'source'=>array('type'=>'keyword',          ),'uid'=>array('type'=>'integer',          ),'username'=>array('type'=>'keyword',          ),        ),      ),    ),  ),)

这里获取的相关信息就是我们刚刚创建的索引es可以动态的修改以及添加相关的信息.

2.3 修改/添加mapping信息

注意事项:已经建立好的字段类型是不能更改的!!

接口:$client->indices()->putMapping();

$params = ['index'=>'user_index',//索引名(相当于mysql的数据库)'type'=>'normal_type','body'=>  ['normal_type'=> ['properties'=>['tag'=>['type'=>'text']                    ]                ]            ]        ];$client->indices()->putMapping($params);

2.4 删除索引

接口:$client->indices()->delete($params);

$params = ['index'=>'user_index',//索引名(相当于mysql的数据库)];

3 es的增删改查

3.1 增加数据

单条数据插入

接口:$client->index()

$params = ['index'=>'my_index','type'=>'my_type','id'=>'my_id',// 不填则es会自动生成唯一的id'body'=> ['testField'=>'abc']];$response = $client->index($params);

批量数据插入

接口:$client->bulk();

foreach($userListas$value){                    $params['body'][] = ['index'=> ['_index'=>'user_index','_type'=>'normal_type','_id'=>$value['uid']                        ]                    ];                    $params['body'][] = ['uid'=> $value['uid'],'username'=> $value['username'],'platform'=> $value['platform'],'mobile'=> $value['mobile'],'province'=> $value['province'],'city'=> $value['city'],'sex'=> $value['gender '],'source'=>'xxx'];                }                $responses = $client->bulk($params);

ps:当循环插入大量数据时,需要注意php的内存超出限制的问题.(还不清楚这个框架哪部分操作之后没有释放内存)

3.2 搜索数据

单条数据搜搜,但是需要知道id

接口:$client->get()

$params = ['index'=>'my_index','type'=>'my_type','id'=>'my_id'// es 自动生成/自己录入的];$response = $client->get($params);

批量搜索

接口:$client->search()

$params = ['index'=>'my_index',//['my_index1', 'my_index2'],可以通过这种形式进行跨库查询  'type'=>'my_type',//['my_type1', 'my_type2'],  'body'=> ['query'=> ['match'=> [// 搜索条件'age'=>'24','tag.tagName'=>'tag'// 如果字段存储的是object.//这里搜索必须要这样才能搜索出结果.]          ],'from'=>'0',// 分页'size'=>'200'// 每页数量'sort'=> [// 排序'age'=>'desc'//对age字段进行降序排序  ]      ]  ];  $res = $client->search($params);

返回的数据大致如下:

array(size=4)'took'=> int2'timed_out'=> booleanfalse'_shards'=>array(size=3)'total'=> int5'successful'=> int5'failed'=> int0'hits'=>// 搜索到数据array(size=3)'total'=> int2'max_score'=> float1'hits'=>// 具体数据包array(size=1)0=>array(size=5)              ...

很多时候需要用到类似mysql的and/or 查询es搜索也能做到.

这个时候我们就要用到es的组合过滤器

https://www.elastic.co/guide/cn/elasticsearch/guide/current/combining-filters.html官方文档如下

以下是测试过的一个例子

{"index":"xxx_index","type":"normal_type","body": {"size":20,"from":0,"query": {"bool": {"must": [                    {"match": {"tag.tagName":"xxxx"}                    }                ]            }        },"sort": {"uid":"desc"}    }}

3.3 删除数据

注意:数据删除的时候有一定的缓存更新时间,在没更新的时候还是能被搜索出来.

接口:$client->delete();

$param = ['index'=>'my_index','type'=>'my_type','id'=>'my_id'];            $ret =$this->client->delete($param);

返回数据如下:

array(size=7)'found'=> booleantrue'_index'=> string'user_index'(length=10)'_type'=> string'normal_type'(length=11)'_id'=> string'AVzh_QnIZvcaH3gE7MvE'(length=20)'_version'=> int2'result'=> string'deleted'(length=7)'_shards'=>array(size=3)'total'=> int2'successful'=> int1'failed'=> int0

3.4 更新数据

接口:$client->update()

$params = ['index'=>'my_index','type'=>'my_type','id'=>'3416a75f4cea9109507cacd8e2f2aefc','body'=> ['doc'=> [// 必须带上这个.表示是文档操作'age'=>150]      ]  ];  $res = $client->update($params);

返回结果

array(size=6)'_index'=> string'user_index'(length=10)'_type'=> string'normal_type'(length=11)'_id'=> string'AVzh_QnIZvcaH3gE7Mw5'(length=20)'_version'=> int2'result'=> string'updated'(length=7)'_shards'=>array(size=3)'total'=> int2'successful'=> int1// 当数据没有发生变化时这里是为0'failed'=> int0

4.不同索引之间进行倒数据

注意:不同索引之间倒数据时,需要注意字段的类型,类型不一样会导致导入失败,这个时候可以使用script进行处理

此接口不能再phpapi中运行,作为记录存在

接口:POST _reindex

POST _reindex{"source": {"index":"user_profile"},"dest": {"index":"user_prfile_v1"},"script": {"inline":" ctx._source.tag=params.new_tags","params": {"new_tags":{"tagName":null,"tagWeight":0}    }  }}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,776评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,527评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,361评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,430评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,511评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,544评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,561评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,315评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,763评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,070评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,235评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,911评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,554评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,173评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,424评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,106评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,103评论 2 352