Lucene 6.4.1特殊字符等号“=”未被QueryParser.escape(...)转义

时间:2017-03-28 13:00:28

标签: java lucene

我正在使用lucene 6.4.1并使用包含等号“=”的输入获取异常:

Caused by: INVALID_SYNTAX_CANNOT_PARSE: Syntax Error, cannot parse =:  
at org.apache.lucene.queryparser.flexible.standard.parser.StandardSyntaxParser.generateParseException(StandardSyntaxParser.java:1030)
at org.apache.lucene.queryparser.flexible.standard.parser.StandardSyntaxParser.jj_consume_token(StandardSyntaxParser.java:912)
at org.apache.lucene.queryparser.flexible.standard.parser.StandardSyntaxParser.Clause(StandardSyntaxParser.java:462)
at org.apache.lucene.queryparser.flexible.standard.parser.StandardSyntaxParser.ModClause(StandardSyntaxParser.java:279)
at org.apache.lucene.queryparser.flexible.standard.parser.StandardSyntaxParser.ConjQuery(StandardSyntaxParser.java:210)
at org.apache.lucene.queryparser.flexible.standard.parser.StandardSyntaxParser.DisjQuery(StandardSyntaxParser.java:180)
at org.apache.lucene.queryparser.flexible.standard.parser.StandardSyntaxParser.Query(StandardSyntaxParser.java:133)
at org.apache.lucene.queryparser.flexible.standard.parser.StandardSyntaxParser.TopLevelQuery(StandardSyntaxParser.java:114)
at org.apache.lucene.queryparser.flexible.standard.parser.StandardSyntaxParser.parse(StandardSyntaxParser.java:62)
at org.apache.lucene.queryparser.flexible.core.QueryParserHelper.parse(QueryParserHelper.java:245)
at org.apache.lucene.queryparser.flexible.standard.StandardQueryParser.parse(StandardQueryParser.java:159)

我知道有一个是用

来逃避lucene特殊字符
QueryParser.escape(...)

但为什么不等号呢? 我正在寻找一种灵活的方式来避免任何自编代码逃避它。

1 个答案:

答案 0 :(得分:1)

您正在使用灵活的StandardQueryParser(org.apache.lucene.queryparser.flexible.standard.StandardQueryParser),但正在使用经典的QueryParser(org.apache.lucene.queryparser.classic.QueryParser)进行转义。等号不是经典QueryParser语法的一部分,因此不会被QueryParser.escape

转义