2017-01-03 100 views
0

如何在elastica库中应用弹性搜索过滤器。弹性过滤器的工作

需要一个术语过滤器的例子。

$query1 = new \Elastica\Filter\Term(); 
$query1->setTerm('categories', array('short_description' =>'test metal')); 
$bool->addShould($query); 

$query1 = new \Elastica\Filter\Term(); 
$query1->setTerm('categories', 'test metal'); 

我尝试使用上面这导致以下错误

无效参数的方法。必须是数组或实例 Elastica \ Query \ AbstractQuery

回答

0

过滤器已被弃用。在筛选上下文中使用查询。

例如:

{ 
"query": { 
"bool": { 
    "must": [ 
    { "match": { "title": "Search"  }}, 
    { "match": { "content": "Elasticsearch" }} 
    ], 
    "filter": [ 
    { "term": { "status": "published" }}, 
    { "range": { "publish_date": { "gte": "2015-01-01" }}} 
    ] 
} 
} 
} 

编辑: @Sattu我使用的弹性曲线了。这取决于你拥有哪个版本的Elastica。如果你有v3.2.3,你必须使用原始查询。事情是这样的:

$query = [ 
'query' => [ 
    'bool' => [ 
    'filter' => [ 
     'term => [$field => $value] 
    ] 
    ] 
    ] 
]; 
$index = $client->getIndex('products); 
$type = $index->getType('product'); 
$type->search($query); 

但如果你有弹性曲线V5则可以使用弹性曲线\查询类,并设置过滤器通过addFilter()方法。

+0

这是使用弹性搜索的过滤器。我如何使用elastica库过滤器。 – Sattu