gpt4 book ai didi

elasticsearch - ElasticSearch 5-迁移 “missing”过滤器

转载 作者:行者123 更新时间:2023-12-02 23:25:01 25 4
gpt4 key购买 nike

在ElasticSearch 1和2.x中,我们当前要迁移到5的应用程序中使用了“缺失”过滤器。

“缺少”过滤器用于创建如下选择:
返回缺少价格或价格> 100的所有结果。

在ES5中,缺少的过滤器已不存在,并且文档说可以用“must_not”和“exists”的组合替换它,但是在我的情况下,我正在编写“或”查询,没有“should_not” ”子句。

摘自https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html上的文档:

missing query has been removed because it can be advantageously replaced by an exists query inside a must_not clause as follows:


GET /_search
{
"query": {
"bool": {
"must_not": {
"exists": {
"field": "user"
}
}
}
}
}

您将如何在ES5中进行迁移?

谢谢!

更新:这是用于构建查询的PHP / Elastica代码。不幸的是,我没有JSON查询,因为该应用程序目前无法运行。但是,这个想法很简单:我希望所有缺少“价格”或大于100的结果。
$and = new \Elastica\Filter\BoolFilter();
$and->addMust(new \Elastica\Filter\Term(array('highlights_ids' => $highlight->getId())));

$or = new \Elastica\Filter\BoolOr();
$or->addFilter(new \Elastica\Filter\Missing('price')); // if price is missing => show always
$or->addFilter(new \Elastica\Filter\Range("price", array('from' => $minPrice)));
$and->addMust($or);

$filter = new \Elastica\Query\BoolQuery(null, $and);
$query = new \Elastica\Query($filter);

$query->setFields(array()); // No fields, we get them from the db
$query->setSize($max);

$result = $this->tripProvider->search($query);

最佳答案

我猜should查询会做必要的

{
"query": {
"bool": {
"should": [
{
"bool": {
"must_not": {
"exists": {
"field": "price"
}
}
}
},
{
"range": {
"price": {
"from": 100
}
}
}
]
}
}
}

关于elasticsearch - ElasticSearch 5-迁移 “missing”过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44235769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com