如何解决如何在Elasticsearch中对高度进行范围搜索
如何在Elasticsearch中表示Height和HeightRange,以便更轻松地进行范围搜索
Height.java: int feet,int inches;
HeightRange.java: Height from,Height to
解决方法
如果我很了解您的问题,则可以使用范围查询,如下所示。我进行了如下本地测试,并提取了以下数据:
"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 to
,lte
等效于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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。