因此,我在EC2示例AWS ES 7上运行CakePHP 4,并在CakePHP中设置了ElasticSearch插件。
composer require cakephp/elastic-search "^3.0"
我已经在config/app.php中添加了弹性数据源连接
'elastic' => [
'className' => 'Cake\ElasticSearch\Datasource\Connection',
'driver' => 'Cake\ElasticSearch\Datasource\Connection',
'host' => 'search-DOMAIN.REGION.es.amazonaws.com',
'port' => 443,
'transport' => "AwsAuthV4",
'aws_access_key_id' => "KEY",
'aws_secret_access_key' => "SECRET",
'aws_region' => "REGION",
'ssl' => 'true',
],
..我已经激活了插件
use Cake\ElasticSearch\Plugin as ElasticSearchPlugin;
class Application extends BaseApplication
{
public function bootstrap()
{
$this->addPlugin(ElasticSearchPlugin::class);
我已经通过curl从EC2示例手动添加了一条索引记录到ES中,所以我知道EC2和ES之间的通信正常。
curl -XPUT -u 'KEY:SECRET' 'https://search-DOMAIN.REGION.es.amazonaws.com/movies?pretty' -d '{"director": "Burton, Tim", "genre": ["Comedy","Sci-Fi"], "year": 1996, "actor": ["Jack Nicholson","Pierce Brosnan","Sarah Jessica Parker"], "title": "Mars Attacks!"}' -H 'Content-Type: application/json'
我还设法通过curl搜索了这张唱片,没有任何问题。
在AppController.php中,我尝试了这个简单的搜索,只是为了看看插件是否工作,但我的生命,我不能让它工作。
# /src/Controller/AppController.php
...
use Cake\ElasticSearch\IndexRegistry;
class AppController extends Controller
{
public function initialize(): void
{
parent::initialize();
$this->loadModel('movies', 'Elastic');
$query = $this->movies->find('all');
$results = $query->toArray();
我收到以下错误:
客户端错误:POST https://search-DOMAIN.REGION.es.amazonaws.com/movies/movies/_search导致403禁止响应:{“message”:“请求中包含的安全令牌无效。"} Elastica\异常\连接\GuzzleException
似乎插件添加了'索引'名称两次出于某种原因。我到处寻找一个设置,我可能已经错过了。如果我复制并粘贴上述网址,并删除重复的索引从网址在浏览器中,它的工作正常。
https://search-DOMAIN.REGION.es.amazonaws.com/movies/_search
我是不是漏掉了什么?
我甚至尝试过这种方法,但在url中重复索引值时也遇到了同样的问题。
$Movies = IndexRegistry::get('movies');
$query = $Movies->find('all');
$results = $query->toArray();
我尝试了一个新的/干净的CakePHP示例,还是遇到了同样的问题?插件有什么问题吗?有没有更好的方法通过CakePHP与ES通信?
1条答案
按热度按时间rvpgvaaj1#
我不熟悉插件和Elasticsearch,但据我所知,其中一个
movies
是索引名,其中一个是类型名,其中类型名-至少根据文档-应该是单数,即路径应该看起来像:此外,Index类假设类型Map具有索引的单数名称,例如
articles
索引具有article
的类型Map。http://book.cakephp.org/elasticsearch/3/en/3-0-upgrade-guide.html#types-renamed-to-indexes
这是否是所使用的Elasticsearch版本所支持的正确路径,这可能是一个不同的问题。
您可能需要打开一个有关at GitHub的问题。