当我添加多个solr服务器作为端点并使用单个日光浴客户端在任何solr服务器上触发查询时; 我将复制主/从添加到solr。现在我觉得当onecore(主服务器或从服务器)的服务器出现故障时,客户端/日光浴室必须使用可用的端点。
我得到了这个错误:
Message: Solr HTTP error: HTTP request failed, Failed connect to 127.0.0.1:8983; No error
因为我在端口8983中停止solr并且solr在端口9000中的slave core上运行,在这种情况下,如果localhost没有运行,我将寻找连接到localhost2的问题。 这是我的代码:
$config = array(
"endpoint" => array("localhost" => array("host"=>"127.0.0.1",
"port"=>"8983", "path"=>"/solr", "core"=>"master",),
"localhost2" => array("host"=>"127.0.0.1",
"port"=>"9000", "path"=>"/solr", "core"=>"slave",)
) );
$client = new Solarium\Client($config);
$ping = $client->createPing();
$client->ping($ping,"localhost2");
$client->getEndpoints();
当密钥localhost未运行且密钥localhost2在端口9000中运行时,我收到此消息 Solr HTTP错误:HTTP请求失败,连接失败到127.0.0.1:8983;没有错误
$ client-> getEndpoints();
的输出object(Solarium\Client) {
[protected] options => array(
'adapter' => 'Solarium\Core\Client\Adapter\Curl',
'endpoint' => array(
'localhost' => array(
'host' => '*****',
'port' => '*****',
'path' => '/solr',
'core' => 'master'
),
'localhost2' => array(
'host' => '*****',
'port' => '*****',
'path' => '/solr',
'core' => 'slave'
)
)
)
[protected] queryTypes => array(
'select' => 'Solarium\QueryType\Select\Query\Query',
'update' => 'Solarium\QueryType\Update\Query\Query',
'ping' => 'Solarium\QueryType\Ping\Query',
'mlt' => 'Solarium\QueryType\MoreLikeThis\Query',
'analysis-document' => 'Solarium\QueryType\Analysis\Query\Document',
'analysis-field' => 'Solarium\QueryType\Analysis\Query\Field',
'terms' => 'Solarium\QueryType\Terms\Query',
'suggester' => 'Solarium\QueryType\Suggester\Query',
'extract' => 'Solarium\QueryType\Extract\Query',
'get' => 'Solarium\QueryType\RealtimeGet\Query'
)
[protected] pluginTypes => array(
'loadbalancer' => 'Solarium\Plugin\Loadbalancer\Loadbalancer',
'postbigrequest' => 'Solarium\Plugin\PostBigRequest',
'customizerequest' => 'Solarium\Plugin\CustomizeRequest\CustomizeRequest',
'parallelexecution' => 'Solarium\Plugin\ParallelExecution\ParallelExecution',
'bufferedadd' => 'Solarium\Plugin\BufferedAdd\BufferedAdd',
'prefetchiterator' => 'Solarium\Plugin\PrefetchIterator',
'minimumscorefilter' => 'Solarium\Plugin\MinimumScoreFilter\MinimumScoreFilter'
)
[protected] eventDispatcher => object(Symfony\Component\EventDispatcher\EventDispatcher) {
[private] listeners => array()
[private] sorted => array()
}
[protected] pluginInstances => array()
[protected] endpoints => array(
'localhost' => object(Solarium\Core\Client\Endpoint) {
[protected] options => array(
'host' => '*****',
'port' => '*****',
'scheme' => 'http',
'path' => '/solr',
'core' => 'master',
'timeout' => (int) 5,
'key' => 'localhost'
)
},
'localhost2' => object(Solarium\Core\Client\Endpoint) {
[protected] options => array(
'host' => '*****',
'port' => '*****',
'scheme' => 'http',
'path' => '/solr',
'core' => 'slave',
'timeout' => (int) 5,
'key' => 'localhost2'
)
}
)
[protected] defaultEndpoint => 'localhost'
[protected] adapter => null
}
答案 0 :(得分:1)
这就是我设法在端点'
之间切换的方法$endpoints=[
'endpoint' => [
'foo' => [
'host' => '127.0.0.1',
'port' => '9000',
'path' => 'foo',
'core' => 'foo',
'timeout' => 15
],
'baz' => [
'host' => '127.0.0.1',
'port' => '7464',
'path' => 'baz',
'core' => 'baz',
'timeout' => 15
],
]
];
$solrClient = new Solarium\Client($config);
$solrClient->setDefaultEndPoint('baz');
函数setDefaultEndPoint将执行魔术
setDefaultEndPoint
`
答案 1 :(得分:0)
这用于在PHP框架中建立多个solr连接。
要将以下代码添加到您的配置文件夹中
<?php
$config['endpoint1'] = array( // endpoint1 is a FIRST connection.
'endpoint' => array(
'localhost' => array(
'host' => 'host_name', // localhost or www.host.com
'port' => 'port_value', //Default 8983 or 8080 etc,
'path' => '/solr/',
'core' => 'solr_core_name' // core1 or movie1 or etc,
)
)
);
$config['endpoint2'] = array( // endpoint2 is a secound connection.
'endpoint' => array(
'localhost' => array(
'host' => 'host_name', // localhost or www.host.com
'port' => 'port_value', //Default 8983 or 8080 etc,
'path' => '/solr/',
'core' => 'solr_core_name' // core1 or movie1 or etc,
)
)
);
?>
并在__construct()方法中添加连接链接
public function __construct() {
parent::__construct();
$this->config->load('solarium');
$this->endpoint1 = new Solarium\Client($this->config->item('endpoint1'));
$this->endpoint2 = new Solarium\Client($this->config->item('endpoint2'));
}
如果对设置solr及其连接有任何疑问,请参考to this Github repository。