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

如何在lucene查询中正确地转义OR和?,lucene,analyzer,Lucene,Analyzer,当我传入一个查询“state:OR”时,lucene给出了一个错误,因为它认为“OR”是 布尔子句的关键字,但这里我实际上是俄勒冈州的缩写 我已经看到,引用或使查询变成“state:”或“state:”使其工作 但这听起来不是一个很好的方法,因为我必须对lucene使用的每个关键字进行字符串替换:AND或NOT和其他??我不知道有多少 我尝试直接构造查询而不是执行queryParser.parse(),但这似乎没有通过分析器,这是一个大问题。中只有3个独立的关键字--AND,OR,AND not

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

我已经看到,引用或使查询变成“state:”或“state:”使其工作

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


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

中只有3个独立的关键字--AND,OR,AND not。(“TO”也被使用,但只在范围查询中被识别。)


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

有很多方法可以避免这种情况,更干净的方法是使用前导反斜杠进行转义,或“不使用前导反斜杠”,例如:

\\AND\\OR\\NOT


或者,代码解析器不会像操作符那样解析它们的小写等价物,而只是为了写一份简历,它可能会帮助其他人寻找这个问题的答案

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


我们需要在小写中使用保留字(或,和,不)(和,或,到),它不会给出任何错误并正确执行搜索。

您可以在构造查询之前手动分析术语,所以我正在做类似
搜索术语的事情。replaceAll(\\b(和或不)\\b“,“\\1”)
转义一个文本,并在用户输入的搜索框中使用,最终在solr查询中结束-我发现,通过预挂起\\转义AND的工作原理是不再存在解析异常,但它实际上不会搜索文本字符串。在Solr speak中,查询中的参数
name:\\AND
在返回名为“Jim AND john”的条目时,找不到任何结果。小写可能是最好的选择,至少在solr中是这样!