2020年10月7日01:00:17
laravel8 php7.3.4 mysql 5.7
centos8安装elasticsearch,出门左转找一下
安装扩展
composer require elasticsearch/elasticsearch
elasticsearch的中文开发文档
https://learnku.com/docs/elasticsearch-php/6.0
官方php客户端文档
https://www.elastic.co/guide/cn/elasticsearch/php/current/_index_management_operations.html
Elasticsearch 权威指南
http://blog.didispace.com/books/elasticsearch-definitive-guide-cn/
注意:这里的只是类比,不是完全一样
你需要线上使用,请注意,深入理解elasticsearch的接口,因为php也是封装之后的使用,所以会有出入
$params = [
'index' => 'my_index', //索引名(相当于mysql的数据库)
'body' => [
'settings' => [
'number_of_shards' => 5, #分片数
],
'mappings' => [
'my_type' => [ //类型名(相当于mysql的表)
'_all' => [
'enabled' => 'false'
],
'_routing' => [
'required' => 'true'
],
'properties' => [ //文档类型设置(相当于mysql的数据类型)
'name' => [
'type' => 'string',
'store' => 'true'
],
'age' => [
'type' => 'integer'
]
]
]
]
]
];
实例demo
测试数据
https://github.com/chinese-poetry/chinese-poetry
使用的是
chinese-poetry\json\poet.song.0.json
写入数据库
CREATE TABLE `poet` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`author` text CHARACTER SET utf8 COLLATE utf8_unicode_ci,
`paragraphs` text CHARACTER SET utf8 COLLATE utf8_unicode_ci,
`title` text CHARACTER SET utf8 COLLATE utf8_unicode_ci,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=290 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
写入的是时候会出现繁体问题
使用https://github.com/uutool/hanzi-convert
//简体转繁体:
$str = "好难";
HanziConvert::convert($str,true);
//繁体转简体
$str = "好難";
HanziConvert::convert($str);
虽然支持的不是很全,但是写入个100-200条足够测试了,或者可以吧你项目新闻类,或者产品类的数据库作为测试数据
$data1 = file_get_contents('./poet.song.0.json');
$dd = json_decode($data1, true);
if (!empty($dd)) {
foreach ($dd as $k => $v) {
$Poet = new Poet();
$Poet->author = HanziConvert::convert($v['author']);
$Poet->paragraphs = HanziConvert::convert(implode(',', $v['paragraphs']));
$Poet->title = HanziConvert::convert($v['title']);
$Poet->save();
}
}
die;
$hosts = [
'192.168.3.15:9200', // IP + Port
];
$client = ClientBuilder::create() // Instantiate a new ClientBuilder
->setHosts($hosts) // Set the hosts
->build(); // Build the client object
$Poet = Poet::get()->toArray();
foreach ($Poet as $k => $v) {
$params = [
'index' => 'zx_index',
'type' => 'zx_type',
'id' => 'zx_' . $v['id'],
'body' => [
'id' => $v['id'],
'author' => $v['author'],
'paragraphs' => $v['paragraphs'],
'title' => $v['title'],
],
];
$response = $client->index($params);
}
$serparams = [
'index' => 'zx_index',
'type' => 'zx_type',
];
$serparams['body']['query']['match']['paragraphs'] = '未离';
// $serparams['body']['query']['match']['author'] = '宋太祖';
$resech = $client->search($serparams);
print_r($resech);
结果
Array
(
[took] => 6
[timed_out] =>
[_shards] => Array
(
[total] => 1
[successful] => 1
[skipped] => 0
[failed] => 0
)
[hits] => Array
(
[total] => Array
(
[value] => 23
[relation] => eq
)
[max_score] => 9.34944
[hits] => Array
(
[0] => Array
(
[_index] => zx_index
[_type] => zx_type
[_id] => zx_2
[_score] => 9.34944
[_source] => Array
(
[id] => 2
[author] => 宋太祖
[paragraphs] => 未离海底千山黑,纔到天中万国明。
[title] => 句
)
)
[1] => Array
(
[_index] => zx_index
[_type] => zx_type
[_id] => zx_45
[_score] => 4.187741
[_source] => Array
(
[id] => 45
[author] => 陈抟
[paragraphs] => 常人无所重,惟睡乃为重。,举世皆为息,魂离神不动。,觉来无所知,贪求心愈用。,堪笑尘中人,不知梦是梦。
[title] => 赠金励睡诗 其一
)
)
[2] => Array
(
[_index] => zx_index
[_type] => zx_type
[_id] => zx_190
[_score] => 3.757749
[_source] => Array
(
[id] => 190
[author] => 孟宾于
[paragraphs] => 仙岛却回空说梦,清朝未达自嫌身。
[title] => 句 其四
)
)
[3] => Array
(
[_index] => zx_index
[_type] => zx_type
[_id] => zx_76
[_score] => 3.6272902
[_source] => Array
(
[id] => 76
[author] => 陶谷
[paragraphs] => 是箇碑文念得全,聪明灵性自天然。,离吴别楚三千里,入洛游梁二十年。,负艺已闻喧世界,高眠长见卧云烟。,相逢与我情何厚,问佛方知宿有缘。
[title] => 寄赠梦英大师
)
)
[4] => Array
(
[_index] => zx_index
[_type] => zx_type
[_id] => zx_142
[_score] => 3.6272902
[_source] => Array
(
[id] => 142
[author] => 释延寿
[paragraphs] => 散诞疏狂得自然,免教拘迫事相牵。,潜龙不离滔滔水,孤鹤唯宜远远天。,透室寒光松槛月,逼人凉气石渠泉。,非吾独了西来意,竹祖桐孙尽入玄。
[title] => 山居诗 其六一
)
)
)
)