Что вызывает ошибку «<field>, проиндексированную без данных о положении» в Lucene с использованием Luke? - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь найти поле DOI из документов, проиндексированных с помощью Lucene.Значение для DOI выглядит примерно так: «10.1186 / 1756-3305-7-73».Извините, если вопрос глупый, но я впервые окунаю руки в Lucene.

Ошибка:

[2019-02-05 17: 37: 18,233] ОШИБКА (ExceptionHandler.java:36) - поле "doi" было проиндексировано без данных позиции;не может запустить PhraseQuery (фраза = doi: "10.1186 s12937 015 0065 5") java.lang.IllegalStateException: поле "doi" было проиндексировано без данных позиции;не удается запустить PhraseQuery (фраза = doi: "10.1186 s12937 015 0065 5")

Подробности вопроса:

  • Версия Lucene - 7
  • Запросвыражение - doi: "10.1186 / 1756-3305-7-73"
  • Разобранный запрос - doi: "10.1186 1756 3305 7 73" (обратите внимание, что он удаляет косую черту и дефисы)
  • Пробовали анализаторы - английский анализатор, стандартный анализатор, простой анализатор
  • Программное обеспечение, используемое для навигации по индексу Lucene - Luke v7.6.0

И нет, я не ошибаюсь.Значение для поля «DOI» уже проиндексировано с помощью Lucene.

Вот полный журнал ошибки:

[2019-02-05 17: 37: 18,233]ОШИБКА (ExceptionHandler.java:36) - поле "doi" было проиндексировано без данных позиции;не может запустить PhraseQuery (фраза = doi: "10.1186 s12937 015 0065 5") java.lang.IllegalStateException: поле "doi" было проиндексировано без данных позиции;не может запустить PhraseQuery (фраза = doi: «10.1186 s12937 015 0065 5») в org.apache.lucene.search.PhraseQuery $ 1.getPhraseMatcher (PhraseQuery.java:434) в org.apache.lucene.search.PhraseWeight.scer (.java: 46) в org.apache.lucene.search.Weight.bulkScorer (Weight.java:177) в org.apache.lucene.search.IndexSearcher.search (IndexSearcher.java:667) в org.apache.lucene.search.IndexSearcher.search (IndexSearcher.java:471) в org.apache.lucene.search.IndexSearcher.search (IndexSearcher.java:592) в org.apache.lucene.search.IndexSearcher.searchAfter (IndexSearcher.java:447)в org.apache.lucene.luke.models.search.SearchImpl.search (SearchImpl.java:283) в org.apache.lucene.luke.models.search.SearchImpl.search (SearchImpl.java:273) в org.apache.lucene.luke.app.desktop.components.SearchPanelProvider.doSearch (SearchPanelProvider.java:516) в org.apache.lucene.luke.app.desktop.components.SearchPanelProvider.access $ 500 (SearchPanelProvider.java:93)apache.lucene.luke.app.desktop.components.SearchPanelProvider $ ListenerFunctions.execSearch (SearchPanelProvider.java:672) в javax.swing.AbstractButton.fireActionPerformed (AbstractButton.java:2022) в javax.swing.AbstractButton $ Handler.actionPerformed (абстрактное ядро)(processMouseEvent (Component.java:6539) в javax.swing.JComponent.processMouseEvent (JComponent.java:3324) в java.awt.Component.processEvent (Component.java:6304) в java.awt.Container.processEvent (Container.java).: 2239) в java.awt.Component.dispatchEventImpl (Component.java:4889) в java.awt.Container.dispatchEventImpl (Container.java:2297) в java.awt.Component.dispatchEvent (Component.java:4711) в java.awt.LightweightDispatcher.retargetMouseEvent (Container.java:4904) в java.awt.LightweightDispatcher.processMouseEvent (Container.java:4535) в java.awt.LightweightDispatcher.dispatchEvent (Container.java:4476) в java.awt.Container.dispatchEventImpl (Container.java:2283) в java.awt.Window.dmplvent Window.java: 2746) в java.awt.Component.dispatchEvent (Component.java:4711)в java.awt.EventQueue.dispatchEventImpl (EventQueue.java:760) в java.awt.EventQueue.access $ 500 (EventQueue.java:97) в java.awt.EventQueue $ 3.run (EventQueue.java:709) в java.AWT.doIntersectionPrivilege (ProtectionDomain.java:84) в java.awt.EventQueue $ 4.run (EventQueue.java:733) в java.awt.EventQueue $ 4.run (EventQueue.java:731) в java.security.AccessController.doPrivileСобственный метод) по адресу java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (ProtectionDomain.java:74) по адресу java.awt.EventQueue.dispatchEvent (EventQueue.java:730) по адресу java.awt.EventDispatchThread.Foris.Omp.Omp.Opв java.awt.EventDispatchThread.pumpEventsForFilter (EventDispatchThread.java:116) в java.awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread.java:105) в java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:101) в java.awt.EventDispatchThread.pumpEvents (EventDispis.Ep.Ep.java: 82)

У меня есть интуиция, что ошибка здесь связана с анализом выражения запроса.Я заметил, что - и / были проанализированы из моего исходного запроса, но я понятия не имею, как это исправить.Любое направление в этом вопросе будет по достоинству оценено.

1 Ответ

0 голосов
/ 05 февраля 2019

Dang !!Я нашел ответ после борьбы с ним весь день.

Нельзя использовать Стандартный анализатор, Простой анализатор или Английский анализатор с запросами типа уникального идентификатора.Они анализируют или удаляют важные символы ключевых слов, такие как дефис и / или косую черту.

Итак, я импортировал банки анализатора ключевых слов в Luke и искал выражение запроса, используя его.

Ключевое словоАнализатор был загружен и импортирован в Luke с здесь .

...