Java Lucene中的关键字(或和)搜索
我在我的门户(基于J2EE)中使用Lucene进行索引和搜索服务 问题是关于Lucene的关键字。当您在搜索查询中使用其中一个时,您将得到一个错误 例如:Java Lucene中的关键字(或和)搜索,java,lucene,Java,Lucene,我在我的门户(基于J2EE)中使用Lucene进行索引和搜索服务 问题是关于Lucene的关键字。当您在搜索查询中使用其中一个时,您将得到一个错误 例如: searchTerms = "ik OR jij" 这很好,因为它将搜索“ik”或“jij” 这很好,它搜索“ik”和“jij” 但当你搜索时: searchTerms = "OR" searchTerms = "AND" searchTerms = "ik OR" searchTerms = "OR ik" 等等,它将失败并出现错误:
searchTerms = "ik OR jij"
这很好,因为它将搜索“ik”
或“jij”
这很好,它搜索“ik”
和“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:
...
组件名称:STSE_结果类:org.apache.lucene.queryParser.ParseException消息:无法分析“或jij”:在第1行第0列遇到“或”。
我期待的是:
...
这是有意义的,因为这些词是Lucene的关键字,它们可能被保留,并将充当关键字
在荷兰语中,“OR”一词很重要,因为它对“Ondernemings Raad”有意思。它在许多文本中都有使用,需要找到它。例如,“或”确实有效,但不返回与“或”匹配的文本。如何使其可搜索
我怎样才能避开关键字“或”?或者我如何告诉Lucene将“Or”视为搜索词而不是关键字。当“Or”是搜索词时,您可以将其转义,或者为不同的语法编写自己的查询解析器。Lucene除了解析器之外还提供了一个广泛的查询API,通过它,您可以非常轻松地支持自己的查询语法。在构建查询时,您可能做错了什么。我将支持Narayan关于获得Luke的建议(如评论中所述),并尝试使用该建议运行您的查询。自从我使用Lucene已经有一段时间了,但我不记得曾经有过和或的问题 除此之外,您可以尝试使用QueryParser.escape(userQuery)转义输入字符串
你的问题我已经读了很多遍了=[ 请看这些建议 索引是如何存储的 包含存储字段的文档可以存储为 1) 存储2)标记化3)索引4)向量 它可以产生显著的 请使用,它可以告诉您索引是如何存储的(实际上)
如果你使用lucene,Luke是你必须拥有的,因为它让你真正了解索引是如何存储的,它还提供搜索功能,试试吧,让我们知道你的更新!我想你试过把“或”放在双引号里吗 如果这不起作用,我想你可能不得不改变Lucene源代码,然后重新编译整个过程,就像操作符“或”实际上,编译可能还不够:您必须更改源代码包中作为JavaCC输入的QueryParser.jj文件,然后运行JavaCC,然后重新编译整个过程 然而,好消息是,只有一行需要改变:
|
变成
|
这样,您将只有“| |”作为逻辑OR运算符。有一个build.xml也包含对JavaCC的调用,但您必须自己下载。恐怕我自己现在无法尝试
对于Lucene开发者邮件列表来说,这也许是一个好问题,但如果您这样做了,请让我们知道,他们会想出一个更简单的解决方案;-)或,非和是保留关键字。我在两天前刚刚解决了这个问题,将用户搜索词中的这三个单词的大小写改为be请注意,如果搜索和替换这些关键字,请确保使用单词边界(\b),这样就不会更改诸如ANDROID和ORDER之类的单词
然后,我让用户使用-and+指定NOT和以及,就像Google一样。带双引号的转义和对我有效。因此,请尝试使用Java字符串,如
String query=“字段:\”和\”;
Lucene的哪个版本?好吧,布尔查询在BooleanClause.occurrent.SHOULD | MUST | MUSTNOT(或|和| NOT)中对我有效。Luke中的搜索有效吗==>
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:
...