elasticsearch - Elasticsearch范围不适用于双索引

标签 elasticsearch type-conversion

我已经映射了一个字段,但输入数据是十进制(100.123)。

我已经尝试过任何range搜索,但没有用。我已验证并且数据在正确的索引中,如果我搜索丢失/存在,则可以找到它们。

范围查询:

"range": {
  "nr_val": {
   "from": 123,
   "to": 1234
  }
}

Elasticsearch是否只是忽略值,而是在范围搜索中将它们视为字符串?

因此,在我的情况下,除了完全转储和重新导入之外,我该怎么做才能使范围搜索from:100, to:200适用于100.123?有没有可用的转换选项?

更新详细规格
{
    "state": "open",
    "settings": {
        "index": {
            "creation_date": "1447858537098",
            "number_of_shards": "5",
            "uuid": "iiPzQXasQadvnDF1da8oMw",
            "version": {
                "created": "1070299"
            },
            "number_of_replicas": "1"
        }
    },
    "mappings": {
        "mongo_doc": {
            "properties": {
                "parent": {
                    "type": "string"
                },
                "data.current.specs.nr._nrm_val": {
                    "type": "double"
                },
                "data.current.specs.nr_b._nrm_val": {
                    "type": "double"
                },
                "data": {
                    "properties": {
                        "current": {
                            "properties": {
                                "specs": {
                                    "properties": {
                                        "nr": {
                                            "properties": {
                                                "_nrm_val": {
                                                    "type": "double"
                                                }
                                            }
                                        },
                                        "nr_b": {
                                            "properties": {
                                                "_nrm_val": {
                                                    "type": "long"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "aliases": []
}

似乎映射不太正确...切换为['data']['properties']['current']['properties'](...)表示法。

最佳答案

在您的情况下,该字段应该是double,而不是long。且100.123的索引值为100,您将舍弃小数。

在这一点上,除了理想的重新索引编制之外,可能仅通过脚本过滤即可:

{
  "query": {
    "filtered": {
      "filter": {
        "script": {
          "script": "_source['nr'].value >= param1 && _source['nr'].value <= param2",
          "params": {
            "param1": 100,
            "param2": 200
          }
        }
      }
    }
  }
}

但由于加载了_source,价格会很高。

关于elasticsearch - Elasticsearch范围不适用于双索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33764884/

相关文章:

c++ - 关于 C++ 中常量的隐式转换

c++ - 路径如何存储在这种结构中,以及如何将其转换为其他结构?

Elasticsearch:搜索 bool 字段

map - 我想在 map 中查看IP分布的kibana中的IP地址格式是什么?

type-conversion - 在 Kotlin 中将 Int 二进制转换为 Float

rust - 如何重载引用运算符?

c - 从 "0x4000"(例如)字符串获取十六进制值并将其存储在变量中。

elasticsearch - Django Haystack 通过 Elasticsearch 后端按距离排序,而不是 geo_point 字段错误

elasticsearch - Zeppelin 中的 Elasticsearch 解释器不响应请求

elasticsearch - 为什么 double 字段的 Sum 具有超过 2 个小数位