elasticsearch - 如何在 Elasticsearch 中匹配数组中的所有参数传递?

标签 elasticsearch foselasticabundle

如果所有args(1,2)之一匹配并且我需要所有args必须具有使用者的degree.id,则此术语给出结果
在这里我有这样的数据

"id": 66,
"name": null,
"degrees": [
    {
        "id": 1,
        "name": "BCA",
    },{
        "id": 2,
        "name": "MCA",
    }
]

所以我需要,如果BCA和MCA两个学位都存在,那么只有那些记录会到达结果中
$term = new \Elastica\Query\Terms();
$term->setTerms('degrees.id', array('1','2'));

return $boolQuery->addMust($term);

最佳答案

您使用setTerms所做的实际上是OR字段上的degrees

要进行AND查询,建议使用Elastica\Query\BoolQuery类,如下所示:

$BCAQuery = new Elastica\Query\Term();
$BCAQuery->setTerm('degree.id', 1);

$MCAQuery = new Elastica\Query\Term();
$MCAQuery->setTerm('degree.id', 2);

$boolQuery = new BoolQuery();
$boolQuery->addMust($BCAQuery);
$boolQuery->addMust($MCAQuery);

请记住,如果将degrees映射为nested,则可以将您的 bool(boolean) 查询与Elastica\Query\Nested一起使用
$degreesQuery = new Elastica\Query\Nested();
$degreeQuery->setPath('degrees');
$degreesQuery->setQuery($boolQuery);

关于elasticsearch - 如何在 Elasticsearch 中匹配数组中的所有参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39532070/

相关文章:

elasticsearch - Logstash Geoip无法正常工作

php - 在Symfony中获得Elasticsearch分数

elasticsearch - [index] 中 VALUE_STRING 的未知键

symfony - FOSElasticaBundle排序不起作用

symfony - Elastica结果:搜索整个索引时如何获取原则对象

symfony - 使用FOSElasticaBundle多次搜索关键字

python - Elasticsearch 无限大小

ssl - 错误加载扩展部分 v3_ca [centos7]

node.js - 如何使用 npm elasticsearch 和 http-aws-es 连接到 AWS ElasticSearch?

java - Elasticsearch 资源泄漏