关键字(OR,AND)在Lucene搜索

我在我的门户网站(基于J2EE)中使用Lucene进行索引和搜索服务。

问题是关于Lucene的关键字。 当您在搜索查询中使用其中一个时,您将收到错误。

例如:

searchTerms = "ik OR jij" 

这很好,因为它会搜索"ik""jij"

 searchTerms = "ik AND jij" 

这很好,它搜索"ik""jij"

但是当你搜索:

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

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

组件名称:STSE_RESULTS类:org.apache.lucene.queryParser.ParseException消息:无法解析'OR jij':在第1行第0列遇到“OR”。 
期待以下之一: 
 ... 

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

在荷兰语中,“OR”这个词很重要,因为它对“Ondernemings Raad”有意义。 它被用在许多文本中,需要找到它。 例如“或”确实有效,但不返回与术语“OR”匹配的文本。 我怎样才能让它可以搜索?

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

我想你已经尝试将“OR”放入双引号中?

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

然而,好消息是只有一条线要改变:

|

|

这样,你只有“||” 作为逻辑OR运算符。 有一个build.xml也包含JavaCC的调用,但您必须自己下载该工具 。 我现在不能自己尝试,我很害怕。

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

ORNOTAND是保留关键字。 我在2天前解决了这个问题,在将其输入到lucene查询解析器之前,将用户搜索词中的3个单词置低。 请注意,如果您搜索并替换这些关键字,请确保使用单词边界(\ b),这样您就不会更改ANDROID和ORDER等单词。

然后我让用户通过使用 – 和+来指定NOTAND ,就像Google一样。

使用双引号转义OR和AND对我有用。 所以尝试使用Java字符串

String query = "field:\"AND\"";

我多次看过你的问题了! = [

请看看这些建议

你的索引是如何存储的?

包含存储的字段的文档可以存储为

1)存储2)标记3)索引4)向量

它可以产生重大影响

请使用Luke ,它可以告诉你如何存储索引(实际上)

如果你正在使用lucene,那么Luke是必须的 ,因为它让你真正了解索引的存储方式,它还提供搜索,尝试让我们知道你的更新!

在构建查询时,您可能做错了什么。 我将第二个Narayan关于获取Luke的建议(如评论中所述)并尝试运行您的查询。 自从我使用Lucene以来已经有一段时间了,但是我不记得曾经有OR和AND的问题。

除此之外,您可以尝试使用QueryParser.escape(userQuery)转义输入字符串

更多关于逃离

您可以在搜索词时转义“OR”,或者为不同的语法编写自己的查询解析器。 除了解析器之外,Lucene还提供了一个广泛的查询API,您可以非常轻松地使用它来支持自己的查询语法。