FOSElasticaBundle搜索日期范围

时间:2016-01-05 10:32:57

标签: php symfony elastica foselasticabundle

我尝试使用FOSElasticaBundle搜索日期范围

$query = new MatchAll();

    $now = date('Y-m-d');

    $rangeLower = new Filtered(
        $query,
        new Range('visibleFrom', array(
            'gte' => $now
        ))
    );


    $rangeUpper = new Filtered(
        $query,
        new Range('visibleTo', array(
            'lte' => $now
        ))
    );

    $query = new \Elastica\Query($rangeUpper);



    $boolFilter = new \Elastica\Filter\Bool();

    $boolFilter->addMust(
        new \Elastica\Filter\Terms('place_id', array(
            $place_id
        ))
    );

    $query->setFilter($boolFilter);


    //$finder = $this->container->get('fos_elastica.finder.place.event');



    $res = $this->finder->find($query,10);

但它不起作用

    print_r($query->getQuery());


Elastica\Query\Filtered Object
(
[_params:protected] => Array
    (
        [query] => Elastica\Query\MatchAll Object
            (
                [_params:protected] => stdClass Object
                    (
                    )

                [_rawParams:protected] => Array
                    (
                    )

            )

        [filter] => Elastica\Filter\Range Object
            (
                [_fields:protected] => Array
                    (
                        [visibleTo] => Array
                            (
                                [lte] => 2016-01-05
                            )

                    )

                [_params:protected] => Array
                    (
                        [visibleTo] => Array
                            (
                                [lte] => 2016-01-05
                            )

                    )

                [_rawParams:protected] => Array
                    (
                    )

            )

    )

[_rawParams:protected] => Array
    (
    )

我希望搜索对象具有visibleFrom> $ now和visibleTo< $ now和place_id = $ place_id

这里是映射配置

     event:
        mappings:
          id:
              type : integer
          place_id:
              type : integer
          visibleFrom:
              type: date
          visibleTo:
              type: date
          dateStart:
              type: date
          dateEnd:
              type: date
        persistence:
            driver: orm
            model: Place\CalendarBundle\Entity\Event
            finder: ~
            provider: ~
            listener: ~

2 个答案:

答案 0 :(得分:0)

$筛选器 - > addMust(new \ Elastica \ Filter \ NumericRange('published_at',  array('lte'=> date('c'),)));

答案 1 :(得分:0)

您可以在config.yml中尝试:

fos_elastica:
    clients:
        default: { host: 'localhost', port: '9201' }
    indexes:
        prefix_user:
            types:
                user:
                    properties:
                        username: ~
                        lastLogin:
                          type: "date"
                    persistence:
                        driver: orm
                        model: AppBundle\Entity\User
                        provider: ~
                        finder: ~

并在您的查询中添加参数:

<?php

namespace AppBundle\Model\Services\ElasticSearch;

use Elasticsearch\ClientBuilder;

/**
 * Class ElasticSearchManager
 *
 * Manager class to interact with the elasticsearch instance
 *
 * @package AppBundle\Model\Services\ElasticSearch
 */
class ElasticSearchManager
{
      /**
     * Find all user indexed
     *
     * @return array colors
     */
    public function findUsers()
    {
        $results = [];

        $params = [
            'index' => 'prefix_user',
            'type'  => 'user',
            'from'  => 0,
            'size'  => 1000,
            'body' => [
                'query' => [
                    'bool' => [
                        'filter' => [
                            "range" => [
                                    "lastLogin" => [
                                        "gte" => "02/05/2018",
                                        "lte" => "2050",
                                        "format" => "dd/MM/yyyy||yyyy"
                                    ]
                            ]
                        ]
                    ]
                ],
                'sort' => [
                    '_id' => [
                        'order' => 'asc'
                    ]
                ]
            ]
        ];

        $results = $this->client->search($params);
        
        return $results;
        }
       
}

文档为here