如何使用弹性搜索获得满足查询条件的文档

时间:2017-03-15 12:28:00

标签: elasticsearch

尝试构建工作弹性查询以获取具有这两个查询文件值的文档,例如,我希望文档或数据的国家/地区为“印度”,财富为“12或10或09”

我试图构建下面的查询,但没有得到预期的结果

{
  "query": {
    "nested": {
      "path": "person_details",
      "query": {
        "bool": {
          "should": [
            { "match": {"person_details.weath": "12"}},
            { "match": {"person_details.weath": "10"}},
            { "match": {"person_details.weath": "09"}}
          ]
        }
      },
      "query": {
        "term": {
          "person_details.country": "INDIA"
        }
      }
    }
  }
}

所以例如在后端,他们是四个人,但有以下细节

person country  person wealth
 india            12
 japan            23
 india            10
 india            09
 US               12 

然后形成的弹性查询必须返回3个人的详细信息,但我的框架查询返回4个条目(也返回美国人详细信息),我的查询不严格考虑国家条件。

对此有任何想法,坚持下去。

更新:基于@paqash更新查询的一个答案

{
  query: {
    nested: {
      path: "product_vendors",
        query: {
            bool :{
                must : [
                    bool : {
                        should : [
                            { "match": {"product_vendors.manufacturer_style": "123"}},
                            { "match": {"product_vendors.manufacturer_style": "345"}}
                        ]
                    },
                    term : {
                        "product_vendors.id": "777"
                    }
                ]
            }
        }
    }
  }
}

甚至在下面尝试过

{
  "query": {
    "nested": {
      "path": "product_vendors",
        "query": {
            "bool" :{
                "must" : [
                    "bool" : {
                        "should" : [
                            { "match": {"product_vendors.manufacturer_style": "123"}},
                            { "match": {"product_vendors.manufacturer_style": "345"}}
                        ]
                    },
                    "term" : {
                        "product_vendors.id": "777"
                    }
                ]
            }
        }
    }
  }
}

低于解析错误

{   “message”:“错误的请求:无效的Json和异常是groovy.json.JsonException:期待'}'或','但得到当前字符'q',其int值为113 \ n \ n当前字符读取为'q 'int值为113 \ nexpecting'}'或','但得到当前字符'q',其int值为113 \ nline number 2 \ nindex number 4 \ n query:{\ n .. ^“ }

1 个答案:

答案 0 :(得分:0)

你应该在must子句中的bool查询中同时进行查询。所以替换:

"query": {
    "bool": {
      "should": [
        { "match": {"person_details.weath": "12"}},
        { "match": {"person_details.weath": "10"}},
        { "match": {"person_details.weath": "09"}}
      ]
    }
  },
  "query": {
    "term": {
      "person_details.country": "INDIA"
    }
  }

使用:

query: {
 bool: {
  must: [
   bool: {
    should: [
        { "match": {"person_details.weath": "12"}},
        { "match": {"person_details.weath": "10"}},
        { "match": {"person_details.weath": "09"}}
      ]
   },
   term: {
      "person_details.country": "INDIA"
    }
  ]
 }
}