Cakephp3 ElasticSearch查询Q

Posted

技术标签:

【中文标题】Cakephp3 ElasticSearch查询Q【英文标题】:Cakephp3 ElasticSearch Query Q 【发布时间】:2016-03-19 12:49:36 【问题描述】:

我如何进行类似的查询

http://localhost:9200/index/businesses/_search?q=services

在 Cakephp3 弹性搜索中

我试过了

$this->Businesses->find('all')->where(['*'=>'services']);

但是我没有得到任何结果。

【问题讨论】:

TLDR;如何在不使用 CakephpES 指定列的情况下从 ES 数据源中搜索文档? 【参考方案1】:

更准确的答案是使用构建器

    $q = 'services'; 
    $businesses = $this->Businesses->find('all')->where(function ($builder) use($q) 
            return $builder->query(new \Elastica\Query\SimpleQueryString($q));
        );

_all 键可能会解决问题

$this->Businesses->find('all')->where(['_all'=>'services']);

【讨论】:

【参考方案2】:

不确定您要问什么,但where(['*'=>'services']) 中的星号应该是您的表架构/数据库中的列名。

另一个常见问题是find() 的结果不是设计查询的结果。请参阅我对Cake PHP 3 needs limit option for find all method 和CakePHP 3 Cookbook: ElasticSearch — Searching Indexed Documents 的回答:

$query = $this->Articles->find()
    ->where([
        'title' => 'special',
        'or' => [
            'tags in' => ['cake', 'php'],
            'tags not in' => ['c#', 'java']
        ]
    ]);

// The query returns multiple rows which you can loop through
//  or alternatively you can call $query->all(); to get the object
//                                $query->toArray(); to get the array
foreach ($query as $article) 
    echo $article->title;

【讨论】:

ElasticSearch 允许您在不指定列的情况下搜索文档。我想在不指定列的情况下进行搜索。

以上是关于Cakephp3 ElasticSearch查询Q的主要内容,如果未能解决你的问题,请参考以下文章

使用模糊 NEST 进行多匹配查询 - ElasticSearch

elastic(10) 基本查询

将“包含”限制为第一个(CakePHP 3)

Elasticsearch 查询返回所有记录

ElasticSearch-搜索查询

(转)Elasticsearch查询规则------match和term