2

我想使用 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.
4

2 回答 2

3

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

与、非、或

这是lucene搜索中使用的关键字。

有两种方法可以处理它:

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

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

于 2018-07-06T07:23:53.040 回答
1

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

于 2017-07-18T17:38:30.260 回答