当我传入一个查询“state:OR”时,lucene给出了一个错误,因为它认为“OR”是一个 boolean子句的关键字,但在这里我实际上是俄勒冈州的缩写,即州。
我已经看到引用OR,因此查询变为'state:'或“或”使其工作。
但这听起来不是一个非常好的方法,因为我必须为lucene使用的每个关键字做一个字符串替换:AND OR NOT和其他?我没有多少
我尝试直接构造查询而不是执行queryParser.parse(),但似乎这不会通过分析器,这是一个很大的问题。
答案 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),它不会出现任何错误,并且可以正确执行搜索。>