Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Lucene中的关键字(或和)搜索_Java_Lucene - Fatal编程技术网

Java 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" 等等,它将失败并出现错误:

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

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

例如:

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: ...