这看起来应该很简单,但我无法弄清楚如何让Lucene忽略AND,OR和NOT关键字 - 查询解析器在获取解析器时会抛出一个解析错误。我有一个查询构建器类,它分割搜索项,以便它搜索单词本身以及单词中的n-gram。我在Java中使用Lucene。
因此,在搜索“ANDERSON COOPER”时,查询字符串如下所示:
name: (ANDERSON COOPER "ANDERSON COOPER")^5 gram4: ( ANDE NDER DERS ERSO RSON
SONC ONCO NCOO COOP OOPE OPER)
查询解析器在获取这些AND时会抛出错误。理想情况下,我希望解析器只是忽略AND,OR,而不是完全,我将使用&&,||和!等价,如果我需要它们 - 我是否必须修改QueryParser类本身的代码才能得到它?或者有更简单的方法吗?如果这是最好的方法,我也可以为这些情况插入一个转义字符,但在单词AND之前添加\
似乎没有做任何事情。
答案 0 :(得分:2)
您可以将AND
包含在这样的引号中:"AND"
。这很容易吗?如果你确切地知道你的查询是什么样的,正则表达式可能很容易做到。
解析器应该没有问题,并且PhraseQuery将被重写为术语查询,因此它将是一个小的恒定时间性能差异大哦O(1)
。
正则表达式可能看起来像这样:
\b(AND|OR|NOT)\b
将替换为
"$1"