首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elastica -多个bool查询-子查询

Elastica -多个bool查询-子查询
EN

Stack Overflow用户
提问于 2016-03-14 01:28:42
回答 1查看 564关注 0票数 0

我想使用elastica过滤类别中的多个匹配项:

类似于:

(categories.name =“类别-1”和categories.level = 0)和(categories.name =“类别-2”和categories.level = 1)

代码语言:javascript
复制
"title": "Test Product 1",
"categories": [
  {
    "id": 1,
    "name": "category-1",
    "title": "Category 1",
    "level": 0
  },
  {
    "id": 2,
    "name": "category-2",
    "title": "Category 2",
    "level": 1
  }
]

我试过:

代码语言:javascript
复制
    $matchQuery = new Query\Match();
    $matchQuery->setField('categories.name', 'category-1');
    //I don't know how to add AND categories.level = 0

    $boolQuery1 = new Bool();
    $boolQuery1->addMust($matchQuery);

    $results = $record->search($boolQuery1)->getResults();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-14 03:08:22

只需将布尔子句转换为JSON格式,即可直接传递给elasticsearch查询。我觉得这个应该管用。

代码语言:javascript
复制
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "categories",
            "query": {
              "bool": {
                "must": [
                  {
                    "term": {
                      "categories.name": {
                        "value": "category-1"
                      }
                    }
                  },
                  {
                    "term": {
                      "categories.level": {
                        "value": "0"
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        {
          "nested": {
            "path": "categories",
            "query": {
              "bool": {
                "must": [
                  {
                    "term": {
                      "categories.name": {
                        "value": "category-2"
                      }
                    }
                  },
                  {
                    "term": {
                      "categories.level": {
                        "value": "1"
                      }
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35978128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档