2015-02-24 68 views
0

我为我的Laravel应用程序使用ES以搜索表格/类型。Elasticsearch查询字符串中的空值

我的用户可以搜索总共5列,这意味着总共可以有31个查询组合。

所以我的问题是现在,如果我可以使用相同的查询,但不提供ES所有的搜索参数。或者以某种方式编写动态查询。

如:

'filtered' => [ 
    'query' => [ 
    'match' => ['title' => Input::get('query')] 
    ], 
    'filter'=> [ 
    'bool' => [ 
     'must' => [ 
     ['term' => [ 'type' => 1] ], 
     ['term' => [ 'state' => 22] ], 
     ['term' => [ 'city' => ] ], (empty) 
     [ 
      'range' => [ 
      'price' => [ 
       'gte' => , (empty) 
       'lte' => , (empty) 
      ] 
      ] 
     ] 
     ] 
    ] 
    ], 
], 

否则我必须写31个不同的这个查询的组合 - 如果ES不要有任何可以帮助我。我可以使用Laravels雄辩的ORM。

在此先感谢

回答

0

您可以更容易通过映射他们Elasticsearch类型使用Elasticquent

Elasticquent使得与Elasticsearch和雄辩的模型工作。您可以使用默认设置,或者定义Elasticsearch应该如何在模型中正确索引和搜索Eloquent模型。

Elasticquent使用官方的Elasticsearch PHP API。要开始,您应该对Elasticsearch的工作原理(索引,类型,映射等)有一个基本的了解。

https://github.com/adamfairholm/Elasticquent

+0

我正在使用那个包。但它不像ORM口才。 $ books = Book :: searchByQuery(array('match'=> array('title'=>'Moby Dick'))); 用户可以通过过滤5个不同的值来搜索/过滤产品。如果我会匹配每种类型的组合,这意味着我将不得不编写31个组合/查询并仅使用所需的组合 – user2722667 2015-02-24 21:01:19