8

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

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

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

我尝试直接构造查询而不是做queryParser.parse(),但似乎这并没有通过分析器,这是一个大问题。

4

3 回答 3

7

有很多方法可以避免这种情况,清洁剂是用前导反斜杠来逃避 AND、OR 和 & NOT,例如:

\\AND \\OR \\NOT

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

于 2012-05-25T16:17:36.053 回答
4

Lucene 查询语法中只有 3 个独立的关键字——AND 、OR 和 NOT。(“TO”也被使用,但仅在范围查询内被识别。)

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

于 2012-04-27T11:49:03.460 回答
0

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

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

我们需要使用小写的保留字(OR、AND、NOT) (and、or、to),它不会给出任何错误并正确地进行搜索。

于 2020-07-29T19:41:45.680 回答