ElasticSearch - 搜索范围内的任何嵌套字段

时间:2017-03-09 13:38:53

标签: elasticsearch query-string elasticsearch-net

我将下一个作为弹性元素的一部分归档:

"PayPlan" : {   
        "ActivePlans" : {  
            "plan1" : {   
                "startsOn" : "1",   
                "endsOn" : "999999"   
            }   
        },   
        "someOtherData" : [   
            NumberLong(0),   0]   
    },   

计划名称完全没有逻辑(可以是' plan2323a'或' plan_hh_jj'等等。)

如何搜索所有具有任何计划的元素,startOn小于X且endsOn大于X? 谢谢大家

我无法使用query_string或使用查询范围并使用下一格式" PayPlan.ActivePlans。*。startsOn" (星号不能作为范围中的通配符

谢谢大家

这是我现在工作的弹性搜索查询,但我想改变计划1'进入' *'所以它会搜索任何子计划:

{
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "bool": {
          "must": [
            {
              "match_all": {}
            },
            {
              "or": {
                "filters": [
                  {
                    "bool": {
                      "must": [
                        {
                          "range": {
                            "PayPlan.ActivePlans.plan1.startsOn": {
                              "lte": "1234"
                            }
                          }
                        },
                        {
                          "range": {
                            "PayPlan.ActivePlans.plan1.endsOn": {
                              "gte": "1236"
                            }
                          }
                        }
                      ]
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

您可以从query string开始:

GET test1/_search
{
  "query": {
    "query_string": {
      "default_field": "PayPlan.ActivePlans.plan*.startsOn",
      "query":  ">0"
    }
  }
}

输出(快速测试运行):

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 2,
    "max_score": 1,
    "hits": [
      {
        "_index": "test1",
        "_type": "plan",
        "_id": "AVq000G1mKJs7uLU8liY",
        "_score": 1,
        "_source": {
          "PayPlan": {
            "ActivePlans": {
              "plan2": {
                "startsOn": "2",
                "endsOn": "999998"
              }
            }
          }
        }
      },
      {
        "_index": "test1",
        "_type": "plan",
        "_id": "AVq00p0pmKJs7uLU8liW",
        "_score": 1,
        "_source": {
          "PayPlan": {
            "ActivePlans": {
              "plan1": {
                "startsOn": "1",
                "endsOn": "999999"
              }
            }
          }
        }
      }
    ]
  }
}