弹性搜索范围不适用于双重索引

时间:2015-11-17 18:57:31

标签: elasticsearch type-conversion

我已将字段映射为long,但输入数据为十进制(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'](...)符号。

1 个答案:

答案 0 :(得分:1)

在您的情况下,该字段应该是double,而不是long100.123的索引值为100,您将丢失小数。

此时,除了重新索引这是理想的,可能只是脚本过滤会这样做:

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

但由于_source加载,它会很昂贵。