ElasticSearch [1.4.4]:使用非数字输入对数字索引进行范围搜索

时间:2015-09-06 05:56:00

标签: elasticsearch lucene

我正在使用Elasticsearch Java API来创建索引并为搜索编写查询。 索引在各个字段上创建。其中一个字段是数字(整数),在其上创建索引。

现在我们得到的输入是字符串形式。我们必须在所有字段中搜索所提供的输入。要搜索我们正在使用的数字字段

QueryBuilders.rangeQuery() method.

但是当它遇到"到"中的任何非整数值时或"来自"它投掷的领域

SearchPhaseExecutionException[Failed to execute phase [query].
nested: NumberFormatException[For input string: \"30y\"]

我该如何避免这种情况?很好,我们没有得到任何搜索结果,但我想避免这个例外,因为可能会出现非整数输入的情况。

另一种选择是检查我想要避免的所有输入令牌,因为它会增加另一级别的检查,这将影响性能。

有什么办法可以用 elasticsearch API 来实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

  

另一种选择是检查我想要避免的所有输入令牌,因为它会增加另一级别的检查,这将影响性能。

无论您的性能要求是什么,检查/验证用户输入都是始终所做的事情。如果您不这样做,则会不必要地将您的群集暴露给未知的未知威胁,但known ones最近会造成一些损害,并且会对您的群集和/或业务产生更大的影响清理用户输入所花费的毫秒数。 Elasticsearch非常灵活,可以创造奇迹,但你也必须使用它。

话虽如此,如果你真的想避免secure coding best practices,你可以使用以下查询,如果输入数据不符合要求,就不会咆哮。

{
  "query": {
    "simple_query_string": {
      "query": "numfield:[10y TO *]"
    }
  }
}

simple_query_string相当于query_string,但输入更宽松,永远不会抛出异常。