当最大范围由具有两个数字的数组定义时,是否有查询范围的方法
is there a way to query range when maximal range is defined by an array with two numbers
我需要编写一个在以下索引格式上运行的弹性范围查询
...
"facetProperties": {
"fid641616": [
31.75,
44.45
]
}
...
仅当 lt
或 gt
匹配最大范围的下限或上限时,以下查询才有效。我一尝试缩小两端,就没有结果。
{
"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 记录您在查询中提到的 gt
和 lt
的差异。
您应该可以查看我在结果中提到的文档。请注意,我假设字段 array
的顺序为 asc
。
基本上它会 return 所有具有 差异 42-33 的文档,即 9。
如果有帮助请告诉我!
我需要编写一个在以下索引格式上运行的弹性范围查询
...
"facetProperties": {
"fid641616": [
31.75,
44.45
]
}
...
仅当 lt
或 gt
匹配最大范围的下限或上限时,以下查询才有效。我一尝试缩小两端,就没有结果。
{
"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 记录您在查询中提到的 gt
和 lt
的差异。
您应该可以查看我在结果中提到的文档。请注意,我假设字段 array
的顺序为 asc
。
基本上它会 return 所有具有 差异 42-33 的文档,即 9。
如果有帮助请告诉我!