当前位置: 首页 > 面试题库 >

一个查询中两个不同过滤器的组合-Elastica

贺懿轩
2023-03-14
问题内容

我的问题很简单。我想在Elastica的一个查询中组合两个过滤器,一个filter_bool和一个filter_range。该代码是

public function getAdvancedTweetsEs($keyword, $location, $datepicker, $datepicker1, $offset)
{
    $elasticaClient = new Elastica_Client();

    // Load index
    $elasticaIndex = $elasticaClient->getIndex('mongoindex3');

    // Define a Query. We want a string query.
    $elasticaQueryString = new Elastica_Query_QueryString();
    //$elasticaQueryString->setDefaultOperator('AND');
    $elasticaQueryString->setQuery($keyword);

    // Create the actual search object with some data.
    $elasticaQuery = new Elastica_Query();
    $elasticaQuery->setQuery($elasticaQueryString);
    $elasticaQuery->setFrom(0);
    $elasticaQuery->setLimit($offset);

    //Set a filter in text
    $elasticaFilterBool = new Elastica_Filter_Bool();                
    $filter1 = new Elastica_Filter_Term();
    $filter2 = new Elastica_Filter_Term();
    $filter1->setTerm('text', array(strtolower($keyword)));
    $filter2->setTerm('location', array(strtolower($location)));        
    $elasticaFilterBool->addMust($filter1);
    $elasticaFilterBool->addMust($filter2);
    $elasticaQuery->setFilter($elasticaFilterBool);

    $range = new Elastica_Query_Range();
    $range->addField('date', 
                        array(  'from' => $datepicker,
                                'to' => $datepicker1
                             ) 
                     );

    //Search on the index.
    $elasticaResultSet = $elasticaIndex->search($elasticaQuery);

    $elasticaResults = $elasticaResultSet->getResults();

    $results = array();

    foreach ($elasticaResults as $elasticaResult) 
    {   
        $results[] = $elasticaResult->getData();
    }

    return $results;
}

我不能在$ elasticaQuery中将两个过滤器放在一起。请给我任何帮助!

谢谢!


问题答案:

为什么不将范围过滤器添加为过滤器中的另一个must术语bool

$rangeFilter = new Elastica_Filter_Range();
$rangeFilter->addField('date', 
                    array(  'from' => $datepicker,
                            'to' => $datepicker1
                         ) 
                 ); 
$elasticaFilterBool->addMust($rangeFilter);
$elasticaQuery->setFilter($elasticaFilterBool);

您需要在布尔过滤器中使用过滤器,而不是查询。注意我已经使用Elastica_Filter_Range而不是您正在使用的范围查询。

另外,您知道您使用的是Elastica的过时版本,新版本使用名称空间!



 类似资料:
  • 我想结合两个筛选函数来选择表中的几个元素。我的代码如下所示: 中的元素必须在第一个并且在一行中。因此,如果返回3个元素,它们必须在一行中,后面是中的元素。我怎样才能做到呢?我可以组合上面的筛选功能吗?

  • 我试图用两个不同的过滤器来配置spring security。我想要的是有一些将由一个过滤器处理的网址,和一些将由其他过滤器处理的网址。这是我想到的设置: 过滤器看起来像这样: 过滤器1 : 过滤器2 : 问题是这两个过滤器都是在一个链中为每个请求调用的。我提出的任何请求,它首先通过一个过滤器,然后通过另一个,而不是仅仅通过一个。 我该怎么解决这个问题? 提前感谢。

  • 我有桌子: 行程:Trip_Num、Trip_Type等 用户的出差历史记录:Username、Trip_Num等 我正在用php做一个项目,需要为一个特定的用户(通过他的用户名)做一个SQL查询--需要知道用户的Trips历史表中Trip_Num的Trip_Type。 附上我的表格: 更新:我需要计算trip_type中的每个值。我的意思是我想看到“步行”-4次,“自行车”-3次,这很好?...

  • 问题内容: 我需要的是对表的查询,该查询将返回列A和B的不同组合,以及表中每种组合发生多少次的计数。所有这些都将按A列进行排序。 如果表是: 结果将是: 任何帮助将是巨大的。 问题答案: GROUP BY是您的朋友在这里: SQLFiddle:http ://sqlfiddle.com/#!9/062b0e/5

  • 是否可以跳过文档中的第一个记录的名称例如product_detail是集合,它有10个文件的名称苹果和10个文件的名称芒果我可以跳过前2个文件中的每一个?下面的查询跳过苹果中的前2个文档。 不要用两个查询跳过“productInfo.name”:“apple”和“productInfo.name”:“mango”的两个文档,我需要一个,有人能帮我吗?

  • 我正在使用MongoDB,我最终得到了两个集合(无意中)。 第一次收集(样本)有1亿条记录(推文),结构如下: 第二个集合(用户)拥有来自tweet集合的3000万条独特用户记录,看起来是这样的 用户集合中的_id是来自推文集合的user.screen_name,目标是他们的状态(是否作弊用户),最后value.count是我们第一个集合(样本)集合中出现的用户数量(例如捕获的推文数量) 现在我想