有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

错误Lucene语法的java查询字符串查询

我正在对Text字段执行Query String Query。当我使用语法错误的查询(例如,"/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"];

在执行查询之前,是否有方法检测此查询的语法是否错误。比如提前解析查询或者将其与正则表达式匹配

更新:

抱歉,我的问题不清楚。我知道这个查询有一个错误的语法,因为它使用了一些保留字符,实际上,它打算用作正则表达式查询。不过,我需要的是在执行查询之前向客户机提供一条有意义的错误消息,表明他的查询的语法错误


共 (1) 个答案

  1. # 1 楼答案

    正斜杠是查询字符串查询语法中的reserved character,用于通过正则表达式进行搜索,因此需要对其进行转义

    你需要使用"\\/xyz"而不是"/xyz"

    请注意,甚至Kibana也不会解析用户输入的正确性。如果想事先检查查询是否有效,可以使用Lucene的^{}尝试在将查询发送到ES之前解析查询

    将查询字符串的功能传递给最终用户是危险的。如果您真的需要为他们提供某种免费文本搜索,请考虑使用{A3},因为它不会抛出任何异常。p>