当最大范围由具有两个数字的数组定义时,是否有查询范围的方法

is there a way to query range when maximal range is defined by an array with two numbers

我需要编写一个在以下索引格式上运行的弹性范围查询

    ...
    "facetProperties": {
      "fid641616": [
        31.75,
        44.45
      ]
    }
    ...

仅当 ltgt 匹配最大范围的下限或上限时,以下查询才有效。我一尝试缩小两端,就没有结果。

    {
      "query": {
        "bool": {
          "should": [{
            "range": {
              "facetProperties.fid641616": {
                "gt": 33,
                "lt": 42
              }
            }
          }]
        }
      },
      "from": 0,
      "size": 250,
      "sort": [

      ],
      "aggs": {

      },
      "_source": "facetProperties.fid641616"
    }

有没有办法在不修改索引的情况下让它工作?

update1 - 一些用例: 查询范围:

    "range": {
              "facetProperties.fid641616": {
                "gt": 33,
                "lt": 42
             }
          }

    facet1 : [31] - should not be found
    facet2 : [31,45] - should be found 
    facet1 : [31,32] - should not be found
    facet1 : [44,45] - should not be found

基本上不可能使用 ES 中的常规 DSL 查询基于数组中两个数字的范围或差异进行查询,但您可以使用脚本来实现。

以下是应该对您有所帮助的文档和示例脚本。

示例文档:

POST range_index/_doc/1
{
  "array": [31.75, 44.45]
}

查询:

POST range_index/_search
{
  "query": {
    "script": {
      "script": {
        "source": """
          List list = doc['array'];
          if(list.size()==2){
            long first_number = list.get(0);
            long last_number = list.get(1);

            if(params.gt < first_number)
              return false;

            if(params.lt > last_number)
              return false;

            if((last_number - first_number) >= (params.lt - params.gt))
              return true;
          }
          return false;
        """,
        "params": {
          "gt": 33,
          "lt": 42
        }
      }
    }
  }
}

我所做的只是创建了一个脚本,该脚本将 return 记录您在查询中提到的 gtlt 的差异。

您应该可以查看我在结果中提到的文档。请注意,我假设字段 array 的顺序为 asc

基本上它会 return 所有具有 差异 42-33 的文档,即 9

如果有帮助请告诉我!