依旧安装composer这里就不多说了,ElasticSearch安装 看这里,先cmd进入项目目录
prefer-dist参数前面是两个半角英文-
执行:
composer require –prefer-dist yiisoft/yiisoft/yii2-elasticsearch “*”
或
php composer.phar –prefer-dist yiisoft/yiisoft/yii2-elasticsearch “*”
安装成功后扩展目录就有了
在\advanced\common\config\main-local.php下添加
<?php
return [
'components' => [
'elasticsearch' => [
'class' => 'yii\elasticsearch\Connection',
'nodes' => [
['http_address' => 'localhost:9200'],
// configure more hosts if you have a cluster
],
],
],
];
随便找个控制器添加以下代码,这里使用的是query查询找个控制器 use yii\elasticsearch\Query;
$query = new Query;
$query->fields(['id','title','content'])
->from('myweb', 'news')//读取已经添加好的对应索引
//->query(['match' => ['id'=>418076]])
// ->query(['match' => ['title'=>['query'=>"汽车 2016","operator"=>"and"]]])
->query(['multi_match' => ['query'=>"安全","fields"=>["title","content"]]])
->orderBy(['_score' => ['order' => 'desc'],'updatetime'=>['order' => 'desc']])
->options(['track_scores'=>true])//指定order by一般就不计算scores了 可以强制计算其相关性,可以设置track_scores为 true。
->highlight([
'pre_tags' => '<em>',
'post_tags' => '</em>',
'fields' => ['title'=>new \stdClass(),'content'=>new \stdClass()]
])
->limit(100);
// build and execute the query
$command = $query->createCommand();
$rows = $command->search(); // this way you get the raw output of elasticsearch.
print_r($rows);
使用Command来创建删除索引 use yii\elasticsearch\Command;
//Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。
$cmd=new Command();
$db = Yii::$app->get('elasticsearch');
$cmd->db=$db;
$Mapping=["news"=>
["properties"=>[
'id' => array('type' => 'long'),
'title' => array('type' => 'string', 'analyzer'=>'ik', 'searchAnalyzer' => 'ik'),
'content' => array('type' => 'string', 'analyzer'=>'ik', 'searchAnalyzer' => 'ik'),
'url' => array('type' => 'string'),
'updatetime' => array('type' => 'long'),
]]
];
// $cmd->indexExists('myweb');//判断是否有对应索引
// $cmd->typeExists('myweb','news');//判断是否有对应类型
print_r($cmd->createIndex('myweb'),[
'settings' => [ 'index' => ['refresh_interval' => '1s'] ],
'mappings' => $Mapping,
]);//创建节点索引 deleteIndex 删除
//exit;
//print_r($cmd->closeIndex('myweb'));//关掉索引
//根据map插入索引
//cmd insert
$posts = YII::$app->db->createCommand('SELECT * FROM news order by updatetime desc limit 1000')->queryAll();
foreach ($posts as $rows) {//查询新闻插入
print_r($cmd->insert('myweb', 'news',
[
'id' => $rows['contentid'],
'title' => $rows['title'],
'content' => $rows['description'],
'url' => $rows['url'],
'updatetime' => $rows['updatetime'],
],null, ['op_type' => 'create']
));
}
//cmd update
/* print_r($cmd->update('myweb', 'news',1000,
[
'id'=>'1',
'title' => '测试1',
]
));*/
//exit;
也可以使用ActiveRecord 这里就不介绍了

