PHP Elastica过滤搜索在预期情况下不返回任何结果
我在弹性搜索索引中创建了一个小数据集(目前只有8项) 这些条目的结构如下PHP Elastica过滤搜索在预期情况下不返回任何结果,php,
elasticsearch,elastica,Php,
elasticsearch,Elastica,我在弹性搜索索引中创建了一个小数据集(目前只有8项) 这些条目的结构如下 { "value_a": "Foo", "value_b": "Bar", "value_c": "Baz" } 在弹性搜索中,如下所示(取自直接查询我的弹性搜索端点): 值a、b和c的组合是唯一的 我想通过对值a和b执行布尔过滤搜索来查找“value_c”的值 在我的代码中,我尝试了以下方法: $filter = new \Elastica\Filter\Bool(); $que
{
"value_a": "Foo",
"value_b": "Bar",
"value_c": "Baz"
}
在弹性搜索中,如下所示(取自直接查询我的弹性搜索端点):
值a、b和c的组合是唯一的
我想通过对值a和b执行布尔过滤搜索来查找“value_c”的值
在我的代码中,我尝试了以下方法:
$filter = new \Elastica\Filter\Bool();
$query = new \Elastica\Query();
$aFilter = new \Elastica\Filter\Term(['value_a' => "Foo"]);
$bFilter = new \Elastica\Filter\Term(['value_b' => "Bar"]);
$filter->addMust($aFilter);
$filter->addMust($bFilter);
$query->setFilter($filter);
$results = $this->bookingPeriodIndex->search($query)->getResults();
var_dump($results);
但是,这不会返回任何结果(var转储输出一个空数组)-也可以通过将此查询直接发布到服务器来手动尝试此查询:
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"value_a": "Foo"
}
},
{
"term": {
"value_b": "Bar"
}
}
]
}
}
}
}
}
这也不会产生任何结果-但是我希望它会返回一个结果,因为我有以下条目:
{
"value_a": "Foo",
"value_b": "Bar",
"value_c": "Baz"
}
我错过什么了吗?这可能是因为数据量小吗?我们在代码库的其他地方使用了相同的Bool-Filter-Elastica查询,这些工作与预期的一样,但是我似乎无法从这个索引中获得任何返回的数据
任何帮助都将不胜感激。最后,我通过使用带有两条匹配语句的bool查询得到了我想要的结果: 原始查询:
{
"query": {
"bool": {
"must": [
{
"match": {
"value_a": "Foo"
}
},
{
"match": {
"value_b": "Bar"
}
}
]
}
}
}
使用Elastica的查询:
$query = new Query;
$booleanQuery = new Bool();
$fooMatch = new Match();
$fooMatch->setField('value_a', 'Foo');
$booleanQuery->addMust($fooMatch);
$barMatch = new Match();
$barMatch->setField('value_b', 'Bar');
$booleanQuery->addMust($barMatch);
$query->setQuery($booleanQuery);
$results = $this->index->search($query)->getResults();
$query = new Query;
$booleanQuery = new Bool();
$fooMatch = new Match();
$fooMatch->setField('value_a', 'Foo');
$booleanQuery->addMust($fooMatch);
$barMatch = new Match();
$barMatch->setField('value_b', 'Bar');
$booleanQuery->addMust($barMatch);
$query->setQuery($booleanQuery);
$results = $this->index->search($query)->getResults();