繁体   English   中英

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

[英]Keyword (OR, AND) search in 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"

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

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”匹配的文本。 我怎样才能让它可以搜索?

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

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

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

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

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

| <OR: ("||") >

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

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

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

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

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

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

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

请看看这些建议

你的索引是如何存储的?

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

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

它可以使一个显著差异

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

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

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

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

更多关于逃离

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM