如果有人知道一个简单的答案,我就不必费力地创建一个带有转义字符串的额外索引,也不必在乱扔我漂亮的代码时哭得我的眼睛。
基本上,我们运行的 Lucene 搜索无法处理任何非字母字符。空格、百分号、圆点、破折号、斜线,应有尽有。这非常令人恼火,因为我无法对包含这些字符的项目进行任何搜索,无论我在哪里逃脱它们。
我有两个选择:在单独的索引中删除这些字符并将它们从我正在搜索的名称中删除或停止该死的搜索。
如果有人知道一个简单的答案,我就不必费力地创建一个带有转义字符串的额外索引,也不必在乱扔我漂亮的代码时哭得我的眼睛。
基本上,我们运行的 Lucene 搜索无法处理任何非字母字符。空格、百分号、圆点、破折号、斜线,应有尽有。这非常令人恼火,因为我无法对包含这些字符的项目进行任何搜索,无论我在哪里逃脱它们。
我有两个选择:在单独的索引中删除这些字符并将它们从我正在搜索的名称中删除或停止该死的搜索。
您可以使用“/”转义特殊字符。Lucene 将以下内容视为特殊字符,您必须转义这些字符才能使其正常工作。
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \
如果要搜索“2+3”,则查询应为“2/+3”
用于QueryParser.escape(String s)
转义查询字符串。
根据http://lucene.apache.org/core/old_versioned_docs/versions/2_9_1/queryparsersyntax.html#-
转义字符是反斜杠,而不是 -forward: 。
为了回答 Ankit,$ 似乎不必转义,因为它不是特殊字符。
按照 Ralph 的建议逃避破折号对我(Zend Lucene)没有任何影响。你会认为,当一个词 'abc-def' 被索引并且你搜索 'abc-def' 你会以某种方式找到那个词,不管在索引步骤是否忽略破折号。相同的输入应该有相同的结果。这个词似乎被索引为两个单独的标记“abc”和“def”。然而,当 'abc def' 搜索时,搜索 'abc-def' 没有结果。