【发布时间】:2014-08-11 07:04:48
【问题描述】:
我正在使用QueryParser::parse() 方法从我的ZendSearch Lucene 索引的字符串搜索词中获取查询。但我对以下查询有疑问:
+php +5.7.1)
这会抛出带有消息的QueryParserException:
语法错误:括号不匹配,每个开头都必须有结尾。
所以我在传递给QueryParser::parse() 之前使用QueryParser::escape() 转义了字符串搜索词,但随后它转义了所有内容,因此这导致了这个字符串:
\\+\\p\\h\\p\\ \\+\\5\\.\\7\\.\\1\\)
现在QueryParserException 已经消失,但也可以使用特殊字符,如+、- 等。
我正在寻找一种方法来逃避特殊字符,这将导致 QueryParserException 所以在我的情况下 ) 应该被转义,因为查询中没有左括号 ) 但我的两个 +应该保持不变。
有没有可能实现这一目标?不进行解析就构建查询本身不是一种选择,因为搜索词是用户输入。
我尝试使用QueryParser::suppressQueryParsingExceptions(),这可能是我正在寻找的东西,但它没有效果。 QueryParser 仍然会抛出 QueryParserException,尽管它的默认值为 true。
【问题讨论】:
标签: php zend-framework2 zend-search-lucene