使用弹性过滤器的工作

Posted

技术标签:

【中文标题】使用弹性过滤器的工作【英文标题】:Working of filters with elastica 【发布时间】:2017-05-17 12:04:22 【问题描述】:

如何在与弹性搜索一起使用的弹性库中应用过滤器。

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

$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

【问题讨论】:

【参考方案1】:

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

例如:


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



编辑: @Sattu 我也在使用 Elastica。这取决于您拥有的 Elastica 版本。如果您有 v3.2.3,则必须使用原始查询。像这样的:

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

但如果你有 Elastica v5,你可以使用 Elastica\Query 类并通过addFilter() 方法设置过滤器。

【讨论】:

这是使用弹性搜索的过滤器。如何使用 elastica 库放入过滤器。【参考方案2】:

ruflin/elastica v 7.0.1:

$bool = new Elastica\Query\BoolQuery();
$filter = new Elastica\Query\Term(['tagType' => 'value']);
$bool->addFilter($filter);

【讨论】:

以上是关于使用弹性过滤器的工作的主要内容,如果未能解决你的问题,请参考以下文章

如何在弹性搜索的过滤器聚合中引用多个嵌套级别?

弹性搜索 - 使用嵌套过滤数组作为存储桶

弹性查询过滤器挑战

弹性搜索/和嵌套可能?

我的弹性映射中有一个嵌套对象。我正在尝试为该嵌套对象创建过滤器查询

在弹性搜索中不过滤的情况下提升匹配术语查询的结果