【问题标题】:Lucene error while parsing Query: Cannot parse '': Encountered "<EOF>" at line 1, column 0解析查询时出现 Lucene 错误:无法解析 '':在第 1 行第 0 列遇到“<EOF>”
【发布时间】:2017-01-09 15:49:25
【问题描述】:

我想使用 Lucene 查询解析器解析一些文本,以对文本进行基本的文本预处理。我使用了以下代码行:

Analyzer analyzer = new EnglishAnalyzer();
QueryParser parser = new QueryParser("", analyzer);
String text = "...";
String ret = parser.parse(QueryParser.escape(text)).toString();

但是,我收到一个错误:

Exception in thread "main" org.apache.lucene.queryparser.classic.ParseException: Cannot parse '': Encountered "<EOF>" at line 1, column 0.

【问题讨论】:

  • 你使用的是什么版本的lucene? QueryParser 中的空参数是什么?
  • 我使用的是 Lucene 6.1.0。空参数是一个字符串,如果传递一个类似的值:“val”,那么变量文本:“如何获取 ``你的电池坏了''消息消失”预处理后显示:“val:how val:get val:your val:batteri val:broken val:messag val:go val:awai”。我不希望“val:”进入预处理行,因此我将其保留为空白(“”)。
  • @FedericoPiazza:是因为字符串的长度吗?对于我收到错误的字符串,是一个很长的字符串!
  • 您的代码不会为我抛出异常,但会生成一个空字符串(预期)。这是抛出异常的地方吗?您的异常是由于尝试解析空字符串引起的,所以也许这个结果正在某个地方重新解析?
  • 尝试重新索引您的数据。

标签: java lucene query-parser


【解决方案1】:

使用Query.escape() 删除特殊字符。但是它不会删除

与、非、或

lucene 搜索中使用的关键字。

有两种处理方式:

  1. 替换查询字符串中的 AND、NOT 和 OR。
  2. 将查询字符串转换为小写。

转换为小写可以解决问题,因为只有大写的 AND、NOT、OR 是关键字。它们被视为小写的常规单词。

【讨论】:

    【解决方案2】:

    对于那些面临这个问题的人,我意识到我的解析器会为单词“NOT”抛出异常,即使在转义之后也是如此。我不得不用另一个词手动替换它。

    【讨论】:

      猜你喜欢
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 2019-09-18
      • 2011-11-08
      • 2021-03-25
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多