[英]Convert Elastic Search Query to Elastica
我有一個彈性搜索查詢:
{
"query": {
"bool": {
"must": [
{
"match": {"title": "accountant"}
},
{
"nested": {
"path": "schools",
"query": {
"bool": {
"must": [
{ "match": { "schools.school_name": "Duke University" }}
]
}}}}
]
}}}
我正在使用php的Elastica庫,我想將這個原始查詢轉換為Elastica。 我知道我可以從Elastica運行原始查詢,但我更喜歡使用Elastica類。 我試過這個和這個 。 但它們都不起作用。 這是我當前代碼的簡化版本:
$schoolsTermFilter = new \Elastica\Filter\Term(['schools.school_name' => "Duke University"]);
$schoolsBoolFilter = new \Elastica\Filter\Bool();
$schoolsBoolFilter->addMust($schoolsTermFilter);
$nestedFilter = new \Elastica\Filter\Nested();
$nestedFilter->setPath("schools");
$nestedFilter->setFilter($schoolsBoolFilter);
$boolFilter = new \Elastica\Filter\Bool();
$boolFilter->addMust($nestedFilter);
$query->setPostFilter($boolFilter);
但是,這會返回空結果。 原始查詢確實返回結果,所以我知道我應該得到一些東西。 有人可以幫助我嗎? 謝謝
這是QueryBuilder版本(> = v1.4.2.0):
$qb = new \Elastica\QueryBuilder();
$query = new \Elastica\Query(
$qb->query()->bool()
->addMust($qb->query()->match(
'title',
'accountant'
))
->addMust($qb->query()->nested()
->setPath('schools')
->setQuery(
$qb->query()->bool()
->addMust($qb->query()->match(
'schools.school_name',
'Duke University'
))
)
)
);
以下是Elastica的1:1翻譯供您查詢:
$query = new \Elastica\Query();
$matchQuery = new \Elastica\Query\Match();
$matchQuery->setField("title", "accountant");
$schoolsTermQuery = new \Elastica\Query\Match();
$schoolsTermQuery->setField("schools.school_name", "Duke University");
$schoolsBoolQuery = new \Elastica\Query\Bool();
$schoolsBoolQuery->addMust($schoolsTermQuery);
$nestedQuery = new \Elastica\Query\Nested();
$nestedQuery->setPath("schools");
$nestedQuery->setQuery($schoolsBoolQuery);
$boolQuery = new \Elastica\Query\Bool();
$boolQuery->addMust($matchQuery);
$boolQuery->addMust($nestedQuery);
$query->setQuery($boolQuery);
print_r(json_encode($query->toArray()));
您粘貼的Elasticsearch查詢不包含過濾器,僅包含查詢。 因此,Elastica轉換不應使用\\Elastica\\Filter
對象,而應使用\\Elastica\\Query
。 此外,如果要在Elasticsearch中使用它之前驗證查詢,可以使用$query->toArray()
進行打印。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.