我正在使用Elasticsearch Java API来创建索引并为搜索编写查询。 索引在各个字段上创建。其中一个字段是数字(整数),在其上创建索引。
现在我们得到的输入是字符串形式。我们必须在所有字段中搜索所提供的输入。要搜索我们正在使用的数字字段
QueryBuilders.rangeQuery() method.
但是当它遇到"到"中的任何非整数值时或"来自"它投掷的领域
SearchPhaseExecutionException[Failed to execute phase [query].
nested: NumberFormatException[For input string: \"30y\"]
我该如何避免这种情况?很好,我们没有得到任何搜索结果,但我想避免这个例外,因为可能会出现非整数输入的情况。
另一种选择是检查我想要避免的所有输入令牌,因为它会增加另一级别的检查,这将影响性能。
有什么办法可以用 elasticsearch API 来实现这个目标吗?
答案 0 :(得分:1)
另一种选择是检查我想要避免的所有输入令牌,因为它会增加另一级别的检查,这将影响性能。
无论您的性能要求是什么,检查/验证用户输入都是始终所做的事情。如果您不这样做,则会不必要地将您的群集暴露给未知的未知威胁,但known ones最近会造成一些损害,并且会对您的群集和/或业务产生更大的影响清理用户输入所花费的毫秒数。 Elasticsearch非常灵活,可以创造奇迹,但你也必须使用它。
话虽如此,如果你真的想避免secure coding best practices,你可以使用以下查询,如果输入数据不符合要求,就不会咆哮。
{
"query": {
"simple_query_string": {
"query": "numfield:[10y TO *]"
}
}
}
simple_query_string
相当于query_string
,但输入更宽松,永远不会抛出异常。