Zend search lucene Zend Lucene无法使用特殊字符进行所有搜索

Zend search lucene Zend Lucene无法使用特殊字符进行所有搜索,zend-search-lucene,escaping,Zend Search Lucene,Escaping,如果有人知道这个问题的简单答案,我就不必费力地用转义字符串创建额外的索引,也不必在乱扔我漂亮的代码时大哭一场 基本上,我们运行的Lucene搜索无法处理任何非字母字符。空格,百分号,点,破折号,斜线,随便你说。这是非常令人愤怒的,因为我无法对包含这些字符的项目进行任何搜索,无论我是否在任何地方转义它们 我有两个选择:在单独的索引中删除这些字符,并从我正在搜索的名称中删除它们,或者停止该死的搜索。您可以使用“/”转义特殊字符。Lucene将下列字符视为特殊字符,您必须转义这些字符才能使其正常工作

如果有人知道这个问题的简单答案,我就不必费力地用转义字符串创建额外的索引,也不必在乱扔我漂亮的代码时大哭一场

基本上,我们运行的Lucene搜索无法处理任何非字母字符。空格,百分号,点,破折号,斜线,随便你说。这是非常令人愤怒的,因为我无法对包含这些字符的项目进行任何搜索,无论我是否在任何地方转义它们


我有两个选择:在单独的索引中删除这些字符,并从我正在搜索的名称中删除它们,或者停止该死的搜索。

您可以使用“/”转义特殊字符。Lucene将下列字符视为特殊字符,您必须转义这些字符才能使其正常工作

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ 

如果要搜索“2+3”,则查询应为“2/+3”

使用
QueryParser.escape(字符串s)
来转义查询字符串。

根据

转义字符是向后斜杠,而不是向前斜杠:

回答Ankit,$似乎不需要转义,因为它不是一个特殊的字符


按照拉尔夫的建议逃离冲刺对我来说没有什么不同(泽德·卢塞恩)。你可能会认为,当一个单词“abc def”被编入索引并搜索“abc def”时,不管在索引步骤中是否忽略破折号,你都会以某种方式找到该单词。相同的输入应该有相同的结果。这个词似乎被索引为两个独立的标记“abc”和“def”。但是,搜索“abc def”时不会得到任何结果,而搜索“abc def”时则不会得到任何结果。

谢谢。这是正确的答案(我一直愚蠢地试图用反斜杠逃跑)。然而,我们早就离开了Zend管理的Lucene指数,因为它是一个可怕的该死的烂摊子。下一次,我们将打开一个Solr实例,绕过所有这些地狱。我有一个问题!我不需要转义
$
符号,因为它是一个特殊字符,标记字符串的结尾吗?如果执行
布尔查询,这不是解决方案。因为像
+web+mail
这样的查询会被转义,它会搜索
web
mail
,而不是搜索这两个关键字。有人知道
Boolean
查询的正确转义吗?