首页 > 解决方案 > 是什么原因导致 ”使用 Luke 在 Lucene 中没有位置数据的索引”错误?

问题描述

我正在尝试从使用 Lucene 索引的文档中搜索 DOI 字段。DOI 的值类似于“10.1186/1756-3305-7-73”。请原谅我,以防这个问题很愚蠢,但这是我第一次将手浸入 Lucene。

错误是:

[2019-02-05 17:37:18,233] 错误 (ExceptionHandler.java:36) - 字段“doi”在没有位置数据的情况下被索引;无法运行 PhraseQuery (phrase=doi:"10.1186 s12937 015 0065 5") java.lang.IllegalStateException: 字段“doi”没有位置数据被索引;无法运行 PhraseQuery (phrase=doi:"10.1186 s12937 015 0065 5")

问题详情:

不,我没有记错。字段“DOI”的值已使用 Lucene 编制索引。

这是错误的完整日志:

[2019-02-05 17:37:18,233] 错误 (ExceptionHandler.java:36) - 字段“doi”在没有位置数据的情况下被索引;无法运行 PhraseQuery (phrase=doi:"10.1186 s12937 015 0065 5") java.lang.IllegalStateException: 字段“doi”没有位置数据被索引;无法在 org.apache.lucene.search.PhraseQuery$1.getPhraseMatcher(PhraseQuery.java:434) 在 org.apache.lucene.search.PhraseWeight.scorer(PhraseWeight) 运行 PhraseQuery (phrase=doi:"10.1186 s12937 015 0065 5") .java:46) 在 org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:667) 在 org.apache.lucene.Weight.bulkScorer(Weight.java:177) 在 org.apache.lucene。 search.IndexSearcher.search(IndexSearcher.java:471) 在 org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:592) 在 org.apache.lucene。

我确实有一种直觉,这里的错误与解析查询表达式有关。我确实注意到 - 和 / 是从我的原始查询中解析出来的,但我不知道如何解决这个问题。在这件事上的任何方向都将不胜感激。

标签: javaluceneluke

解决方案


当!!经过一整天的角力,我找到了答案。

不能使用具有唯一标识符类型查询的标准分析器或简单分析器或英语分析器。他们解析或修剪重要的关键字符号,如连字符和/或正斜杠。

因此,我将关键字分析器 jar 导入 Luke 并使用它搜索查询表达式。

关键字分析器从此处下载并导入 Luke 。


推荐阅读