query字符串查询使用错误的lucene语法

0s0u357o  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(368)

我正在对一个 Text 现场。当我使用错误语法的查询时(例如。, "/xyz" )我收到一个异常,表明elasticsearch未能解析所有碎片上的查询:

Caused by: java.util.concurrent.ExecutionException: RemoteTransportException[[PZCU_1Z][127.0.0.1:9300][indices:data/read/search]]; nested: SearchPhaseExecutionException[all shards failed]; nested: QueryShardException[Failed to parse query [/xyz]]; nested: NotSerializableExceptionWrapper[parse_exception: Cannot parse '/xyz': Lexical error at line 1, column 5.  Encountered: <EOF> after : "/xyz"]; nested: NotSerializableExceptionWrapper[token_mgr_error: Lexical error at line 1, column 5.  Encountered: <EOF> after : "/xyz"];

在执行查询之前,是否有方法检测此查询是否有错误的语法。比如提前解析查询或者将其与正则表达式匹配?
更新:
对不起,我的问题不清楚。我知道这个查询有一个错误的语法,因为它使用了一些保留字符,实际上,它打算用作regex查询。不过,我需要的是在执行查询之前向客户机提供一条有意义的错误消息,指出他的查询具有错误的语法。

quhf5bfb

quhf5bfb1#

正斜杠是查询字符串查询语法中的保留字符,用于通过正则表达式进行搜索,因此需要对其进行转义。
而不是 "/xyz" 你需要使用 "\\/xyz" 请注意,即使kibana也不会解析用户输入的正确性。如果您想事先检查查询是否有效,可以使用lucene的 StandardQueryParser 尝试在将查询发送到es之前对其进行分析。
将查询字符串的权力交给最终用户是危险的。如果您真的需要为他们提供某种自由文本搜索,请考虑使用 simple_query_string 相反,因为它不会抛出任何异常。

相关问题