如何在lucene查询中正确转义OR和AND?

时间:2012-04-26 16:53:15

标签: lucene analyzer

当我传入一个查询“state:OR”时,lucene给出了一个错误,因为它认为“OR”是一个 boolean子句的关键字,但在这里我实际上是俄勒冈州的缩写,即州。

我已经看到引用OR,因此查询变为'state:'或“或”使其工作。

但这听起来不是一个非常好的方法,因为我必须为lucene使用的每个关键字做一个字符串替换:AND OR NOT和其他?我没有多少

我尝试直接构造查询而不是执行queryParser.parse(),但似乎这不会通过分析器,这是一个很大的问题。

3 个答案:

答案 0 :(得分:6)

有很多方法可以避免这种情况,清洁工是逃避AND,OR,&不带前导反斜杠,例如:

\\AND \\OR \\NOT

或者,代码解析器不会将它们的小写等价物解析为运算符

答案 1 :(得分:3)

Lucene query syntax中只有3个独立关键字 - AND,OR和NOT。 (也使用“TO”,但只能在范围查询中识别。)

您的引用代码只需识别实际用作应用程序中的术语的Lucene关键字(如示例中的“OR”),这可能会有所帮助。

答案 2 :(得分:0)

仅作一份简历,它可能会在为这个问题寻找答案时帮助其他人。

应该是正确的答案是icyitscold提供的评论

我们需要在小写(和或to)中使用保留字(OR,AND,NOT),它不会出现任何错误,并且可以正确执行搜索。