PHP Elastica 过滤搜索在预期时不返回任何结果


PHP Elastica filtered search returns no results when expected

我在弹性搜索索引中创建了一个小型数据集(目前只有 8 个项目)。

条目结构如下

{
    "value_a": "Foo",
    "value_b": "Bar",
    "value_c": "Baz"
}
在弹性搜索

中,这如下所示(直接查询我的弹性搜索终结点):

{
    "_index": "foo_bar_bazindex",
    "_type": "foo_bar_baz",
    "_id": "4",
    "_score": 1,
    "_source": {
        "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 dump 输出一个空数组) - 也可以通过将此查询直接发布到服务器来手动尝试此查询:

{
    "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 查询,这些查询按预期工作,但是我似乎无法从该索引返回任何数据。

任何帮助将不胜感激。

最后,

我通过使用带有两个匹配语句的布尔查询得到了我正在寻找的结果:

原始查询:

{
    "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();