gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 22:22:49 25 4
gpt4 key购买 nike

我正在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"];

有没有一种方法可以在执行查询本身之前检测到该查询的语法错误。像是预先解析查询还是将其与正则表达式匹配?

更新:

抱歉,如果我的问题不清楚。我知道以下事实:该查询的语法错误,因为它使用了一些保留字符,并且实际上打算用作正则表达式查询。不过,我需要向客户端提供有意义的错误消息,以指示其查询在执行查询之前的语法错误。

最佳答案

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

您需要使用"/xyz"而不是"\\/xyz"
请注意,甚至连Kibana都没有分析用户输入的正确性。如果要事先检查查询是否有效,则可以使用Lucene的 StandardQueryParser 尝试解析查询,然后再将其发送给ES。

向最终用户分发查询字符串的功能很危险。如果您确实需要为他们提供某种自由文本搜索,请考虑改用 simple_query_string ,因为它不会引发任何异常。

关于java - 查询字符串查询使用错误的Lucene语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46036062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com