当我传入查询“state:OR”时,lucene 给出了一个错误,因为它认为“OR”是布尔子句的关键字,但在这里我实际上使用了俄勒冈州的缩写。
我已经看到引用 OR 因此查询变为 'state:"OR"' 使其工作。
但这听起来不是一个很好的方法,因为我必须对 lucene 使用的每个关键字进行字符串替换:AND OR NOT 和其他?我不知道有多少
我尝试直接构造查询而不是做queryParser.parse(),但似乎这并没有通过分析器,这是一个大问题。
有很多方法可以避免这种情况,清洁剂是用前导反斜杠来逃避 AND、OR 和 & NOT,例如:
\\AND \\OR \\NOT
或者,代码解析器不会将它们的小写等效项解析为运算符
Lucene 查询语法中只有 3 个独立的关键字——AND 、OR 和 NOT。(“TO”也被使用,但仅在范围查询内被识别。)
您的引用代码只需要识别在您的应用程序中实际用作术语的 Lucene 关键字(例如上面示例中的“OR”)可能会有所帮助。
只是为了制作一份简历,在寻找这个问题的答案时,它可能会帮助其他人。
应该是正确的答案是 icyitscold 提供的评论
我们需要使用小写的保留字(OR、AND、NOT) (and、or、to),它不会给出任何错误并正确地进行搜索。