ii2-elasticsearch(3) ii2 elasticsearch의 초보적인 시도
7193 단어 전체 텍스트 검색yii2elasticsearch
return [
//....
'components' => [
'elasticsearch' => [
'class' => 'yii\elasticsearch\Connection',
'nodes' => [
['http_address' => '127.0.0.1:9200'],
// configure more hosts if you have a cluster
],
],
]
];
모델 생성하기
namespace api\models;
class CcIndex extends \yii\elasticsearch\ActiveRecord
{
public static function index()
{
return 'shiliucrm';
}
public static function primaryKey()
{
return ['t_id'];
}
public static function type()
{
return 'user';
}
public function attributes()
{
return ['t_id', 't_nickname', 't_add_time', 'compnay_id'];
}
public static function mapping()
{
return [
static::type() => [
"properties" => [
"t_id" => ["type" => "long"],
"t_nickname" => ["type" => "text","index" => "analyzed",],
"t_add_time" => ["type" => "long","index" => "not_analyzed"],
"compnay_id" => ["type" => "long"],
]
]
];
}
public static function updateMapping()
{
$db = static::getDb();
$command = $db->createCommand();
$command->setMapping(static::index(), static::type(), static::mapping());
}
public static function createIndex()
{
$db = static::getDb();
$command = $db->createCommand();
$command->createIndex(static::index(), [
'settings' => [ 'index' => ['refresh_interval' => '1s'] ],
'mappings' => static::mapping(),
//'warmers' => [ /* ... */ ],
//'aliases' => [ /* ... */ ],
//'creation_date' => '...'
]);
}
public static function deleteIndex()
{
$db = static::getDb();
$command = $db->createCommand();
$command->deleteIndex(static::index(), static::type());
}
}
조작 모형
테스트 데이터를 몇 개 삽입해 주세요.
$model = new CcIndex();
$model->t_id=6;
$model->setAttributes(['t_nickname' => '[email protected]', 't_add_time' => 0, 'company_id' => 2,], false);
$model->save(false);
$model = new CcIndex();
$model->t_id=7;
$model->setAttributes(['t_nickname' => '[email protected]', 't_add_time' => 0, 'company_id' => 2,], false);
$model->save(false);
$model = new CcIndex();
$model->t_id=8;
$model->setAttributes(['t_nickname' => '[email protected]', 't_add_time' => 0, 'company_id' => 3,], false);
$model->save(false);
$model = new CcIndex();
$model->t_id=9;
$model->setAttributes(['t_nickname' => '[email protected]', 't_add_time' => 0, 'company_id' => 3,], false);
$model->save(false);
오보
Cluster autodetection did not find any active nodes.
// 。
설정이 아직 안 된 것 같습니다. 연결을 찾으십시오.php에서 $autodetectCluster라는 변수를 보았습니다. 기본값은true입니다. 즉, 기본 자동 모니터링 그룹입니다. 우리는false로 바꿔야 합니다.
'elasticsearch' => [
'class' => 'yii\elasticsearch\Connection',
'autodetectCluster' => false,
'nodes' => [
['http_address' => '127.0.0.1:9200'],
// ['http_address' => 'inet[/127.0.0.1:9200]'],
// configure more hosts if you have a cluster
],
],
이번에는 잘못 보고하지 않았으니, 우리 한번 조회해 봅시다
$data = CcIndex::find()
->query(["match" => ["t_nickname" => "example.com"]])
->all();
결과적으로 여러분은 스스로 인쇄할 수 있습니다. 여기는 붙이지 않겠습니다
클러스터 구성
$autodetectCluster=true를 기본으로 설정하려면 그룹을 어떻게 설정합니다. 만약 우리가 두 개의 서버를 가지고 있다면, 네트워크 IP는 각각
10.170.224.67,10.170.224.68
10.170.224.67의 예로 구성 vim /usr/local/elasticsearch/config/elasticsearch.yml
덧붙이다
cluster.name: young-application
node.name: node-2
network.host: 10.170.224.67
discovery.zen.ping.unicast.hosts: ["10.170.224.68"]
여기서 cluster.그룹 이름입니다. 이것은 기본값을 사용하지 마십시오. 주석을 수정하고 삭제하십시오. 만약 여러 개의 기계가 같은 그룹에 가입한다면 이 값은 반드시 같아야 합니다.
noide.그룹 안의 모든 노드의 값, 즉 현재 기계의 노드의 값입니다. 이 값은 노드마다 다르지 않습니다.
network host 현재 네트워크 IP로 변경
discovery.zen.ping.unicast.hosts의 ip는 다른 노드의 ip입니다. 만약에 제가 5대의 기계를 가지고 있다면 여기에 다른 4대의 기계의 ip를 써야 합니다.
같은 이치로 다른 노드에 대해서는 다른 노드를 협상하여 쉼표로 구분해야 한다
elasticSearch는 대응하는 노드를 찾아서 자동으로 조각을 나누고 복사 집합을 만들 것입니다.
elasticsearch 시작 오류
ERROR: bootstrap checks failed
max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
첫번째 문제
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
지금은 루트가 아니기 때문에 루트 사용자 이름으로 전환하여 다음 작업을 진행하십시오
vi /etc/sysctl.conf
다음 구성 추가:
vm.max_map_count=655360
저장하고 종료, 실행
sysctl -p
명령두 번째 문제.
max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
루트에서 조작해야 돼요.
vi /etc/security/limits.conf
구성 추가
elasticsearch soft nofile 65536
elasticsearch hard nofile 65536
계정 탈퇴, 계정 다시 로그인elasticsearch 실행
ulimit -Hn
효력 발생 여부 확인elasticsearch 다시 시작
다른 서버도 위의 조작에 따라 설정하면 된다
yii2의 httpaddress 설정도 바꿔야 돼요.
['http_address' => '10.170.224.67:9200']
클러스터 여기에서 저는 테스트에 성공하지 못했습니다. 왜냐하면 저는 서버 한 대만 사용할 수 있기 때문입니다. 비록 시작은 성공했지만 ii2가 클러스터를 방문했을 때 잘못 보고했습니다. 직접적으로killed를 했습니다. 저는 다른 글을 참고했습니다. 제가 클러스터를 부추기는 것은 닥친 문제와 결합하여 쓴 것입니다. 오류가 있으면 바로잡고 다른 사람을 데리고 갈수록 헷갈리지 않도록 하세요.
참고 사항: http://blog.csdn.net/xiegh201...http://www.fancyecommerce.com...http://blog.csdn.net/xxxxxx91...http://blog.csdn.net/u0123714...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Elasticsearch6.x 변화(1)stringstring 유형은 ElasticSearch 이전 버전에서 많이 사용되며, ElasticSearch 5.x부터string을 지원하지 않습니다.text와 키워드 형식으로 대체합니다.(2)text는 하나...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.