Zend Lucene使用特殊字符对所有搜索失败

时间:2009-09-09 09:54:19

标签: zend-search-lucene escaping

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

基本上,我们运行的Lucene搜索无法处理任何非字母字符。空间,百分号,点,破折号,斜线,你的名字。这是非常令人愤怒的,因为无论我在哪里逃避它们,我都无法搜索包含这些字符的项目。

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

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

根据http://lucene.apache.org/core/old_versioned_docs/versions/2_9_1/queryparsersyntax.html#-

转义字符是斜线向后,而不是前进:。

要回答Ankit,$似乎不必转义,因为它不是特殊角色。

按照拉尔夫的建议逃离破折号对我没什么影响(Zend Lucene)。你认为,当一个单词“abc-def'已建立索引,您搜索' abc-def'无论是否在索引步骤中忽略短划线,您都会以某种方式找到该单词。相同的输入应该有相同的结果。这个词似乎被编入索引为两个单独的令牌' abc'并且' def'。然而,寻找&abc-def' ' abc def'确实