Lucene 中的关键字(OR、AND)搜索

2024-03-18

我在我的门户(基于 J2EE)中使用 Lucene 来提供索引和搜索服务。

问题出在Lucene的关键字上。当您在搜索查询中使用其中之一时,您会收到错误消息。

例如:

searchTerms = "ik OR jij"

这工作正常,因为它会搜索"ik" or "jij"

searchTerms = "ik AND jij"

这工作正常,它搜索"ik" and "jij"

但当你搜索时:

searchTerms = "OR"
searchTerms = "AND"
searchTerms = "ik OR"
searchTerms = "OR ik"

等等,它会失败并出现错误:



Component Name: STSE_RESULTS  Class: org.apache.lucene.queryParser.ParseException  Message: Cannot parse 'OR jij': Encountered "OR" at line 1, column 0. 
Was expecting one of: 
... 
  

这是有道理的,因为这些词是 Lucene 的关键字,可能是保留的并且将充当关键字。

在荷兰语中,“OR”一词很重要,因为它具有“Ondernemings Raad”的含义。它在许多文本中都有使用,需要找到它。例如,“or”确实有效,但不会返回与术语“OR”匹配的文本。我怎样才能使其可搜索?

如何转义关键字“or”?或者我如何告诉 Lucene 将“or”视为搜索词而不是关键字。


我想您尝试过将“OR”放入双引号中吗?

如果这不起作用,我认为您可能必须更改 Lucene 源代码,然后重新编译整个内容,因为运算符“OR”深深地埋藏在代码中。实际上,编译可能还不够:您必须更改源包中用作 JavaCC 输入的文件 QueryParser.jj,然后运行 ​​JavaCC,然后重新编译整个内容。

不过,好消息是只需更改一行:

| <OR: ("OR" | "||") >

becomes

| <OR: ("||") >

这样,你就只有“||”作为逻辑或运算符。有一个build.xml也包含JavaCC的调用,但是你必须下载那个工具 https://javacc.dev.java.net/你自己。恐怕我现在不能亲自尝试。

对于 Lucene 开发者邮件列表来说,这可能是一个很好的问题,但是如果您这样做并且他们提出了一个更简单的解决方案,请告诉我们;-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Lucene 中的关键字(OR、AND)搜索 的相关文章

随机推荐