Lucene忽略搜索词中的关键字

Lucene忽略搜索词中的关键字,lucene,Lucene,这看起来应该很简单,但我不知道如何让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 C

这看起来应该很简单,但我不知道如何让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,我将使用&&、| |和!如果我需要它们,我是否必须修改QueryParser类本身中的代码才能得到这些等价物?还是有更简单的方法?如果这是最好的方法,我也可以为这些情况插入转义字符,但在单词前面添加
\
,似乎没有任何作用。

您可以将
用引号括起来:
“和”
。那容易吗?如果您确切知道查询的样子,正则表达式可能很容易做到这一点

解析器应该不会有问题,PhraseQuery将被重写为一个术语查询,因此它将是一个小的常量时间性能差异大的oh
O(1)

正则表达式可能如下所示:

\b(AND|OR|NOT)\b
它将被替换为

"$1"

这正是我需要的,谢谢!我试着用引号把名字括起来,但是每个n-gram也需要用引号括起来。这是我所希望的最简单的解决办法。