如何在Elasticsearch中对高度进行范围搜索

问题描述

如何在Elasticsearch中表示Height和HeightRange,以便更轻松地进行范围搜索

Height.java: int feet,int inches;
HeightRange.java: Height from,Height to

我要搜索范围在一定范围内(例如5英尺-6英尺)的用户

解决方法

如果我很了解您的问题,则可以使用范围查询,如下所示。我进行了如下本地测试,并提取了以下数据:

"hits" : [
  {
    "_index" : "height-index-array","_type" : "_doc","_id" : "OfCHdXUB1QlsTOLdRJgd","_score" : 1.0,"_source" : {
      "user" : "user1","height" : {
        "feet" : 5,"inch" : 8
      }
    }
  },{
    "_index" : "height-index-array","_id" : "CfCJdXUB1QlsTOLdEZxS","_source" : {
      "user" : "user2","height" : {
        "feet" : 7,"inch" : 9
      }
    }
  },"_id" : "CvCJdXUB1QlsTOLdEpx5","_source" : {
      "user" : "user3","inch" : 6
      }
    }
  },"_id" : "C_CJdXUB1QlsTOLdE5yk","_source" : {
      "user" : "user4","_id" : "T_CJdXUB1QlsTOLdFZwx","_source" : {
      "user" : "user5","height" : {
        "feet" : 2,"inch" : 3
      }
    }
  }
]

我以前在5到6之间查询height中的feet的查询:

"query": {
    "range": {
    "height.feet": {
        "gte": 5,"lte": 6
    }
    }
} 

gte等效于greater than or equal tolte等效于less than or equal to

结果是:

"hits" : {
    "total" : {
    "value" : 3,"relation" : "eq"
    },"max_score" : 1.0,"hits" : [
    {
        "_index" : "height-index-array","_source" : {
        "user" : "user1","height" : {
            "feet" : 5,"inch" : 8
        }
        }
    },{
        "_index" : "height-index-array","_source" : {
        "user" : "user3","inch" : 6
        }
        }
    },"_source" : {
        "user" : "user4","inch" : 8
        }
        }
    }
    ]
}

让我知道您是否有任何问题,我们将很乐意为您提供帮助:)

根据您的请求,如果您需要结合两个指标,则可以使用布尔查询:

"query": {
    "bool": {
    "must": [
        {
        "range": {
            "height.feet": {
            "gte": 5,"lte": 6
            }
        }
        },{
        "range": {
            "height.inch": {
            "gte": 6,"lte": 8
            }
        }
        }
    ]
    }
}

响应:

"hits" : [
  {
    "_index" : "height-index-array","_score" : 2.0,"inch" : 8
      }
    }
  }
]

链接: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...