Lucene忽略搜索词中的关键词

时间:2011-06-28 19:49:27

标签: 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 COOP OOPE OPER)

查询解析器在获取这些AND时会抛出错误。理想情况下,我希望解析器只是忽略AND,OR,而不是完全,我将使用&&,||和!等价,如果我需要它们 - 我是否必须修改QueryParser类本身的代码才能得到它?或者有更简单的方法吗?如果这是最好的方法,我也可以为这些情况插入一个转义字符,但在单词AND之前添加\似乎没有做任何事情。

1 个答案:

答案 0 :(得分:2)

您可以将AND包含在这样的引号中:"AND"。这很容易吗?如果你确切地知道你的查询是什么样的,正则表达式可能很容易做到。

解析器应该没有问题,并且PhraseQuery将被重写为术语查询,因此它将是一个小的恒定时间性能差异大哦O(1)

正则表达式可能看起来像这样:

\b(AND|OR|NOT)\b

将替换为

"$1"