gpt4 book ai didi

elasticsearch - 当具有两个数字的数组定义最大范围时,有没有一种查询范围的方法

转载 作者:行者123 更新时间:2023-12-03 00:47:12 26 4
gpt4 key购买 nike

我需要编写一个对以下索引格式进行操作的 flex 范围查询

    ...
"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
}
}
}
}
}

我所做的只是简单地创建了一个脚本,该脚本将返回具有与查询中提到的 gtlt不同的文档。

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

基本上,它将返回所有 差异为的文档 42-33 ,即 9

让我知道是否有帮助!

关于elasticsearch - 当具有两个数字的数组定义最大范围时,有没有一种查询范围的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58932027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com