我在我的门户(基于 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(使用前将#替换为@)