I am trying to search the DOI field from the documents indexed using Lucene. The value for a DOI looks something like this "10.1186/1756-3305-7-73". Pardon me, in case the question is stupid, but this is the first time I am dipping my hands into Lucene.
The error is:
[2019-02-05 17:37:18,233] ERROR (ExceptionHandler.java:36) - field "doi" was indexed without position data; cannot run PhraseQuery (phrase=doi:"10.1186 s12937 015 0065 5") java.lang.IllegalStateException: field "doi" was indexed without position data; cannot run PhraseQuery (phrase=doi:"10.1186 s12937 015 0065 5")
Details of the question:
And no, I am not mistaken. The value for the field "DOI" is already indexed using Lucene.
Here is the complete log of the error:
[2019-02-05 17:37:18,233] ERROR (ExceptionHandler.java:36) - field "doi" was indexed without position data; cannot run PhraseQuery (phrase=doi:"10.1186 s12937 015 0065 5") java.lang.IllegalStateException: field "doi" was indexed without position data; cannot run PhraseQuery (phrase=doi:"10.1186 s12937 015 0065 5") at org.apache.lucene.search.PhraseQuery$1.getPhraseMatcher(PhraseQuery.java:434) at org.apache.lucene.search.PhraseWeight.scorer(PhraseWeight.java:46) at org.apache.lucene.search.Weight.bulkScorer(Weight.java:177) at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:667) at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:471) at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:592) at org.apache.lucene.search.IndexSearcher.searchAfter(IndexSearcher.java:447) at org.apache.lucene.luke.models.search.SearchImpl.search(SearchImpl.java:283) at org.apache.lucene.luke.models.search.SearchImpl.search(SearchImpl.java:273) at org.apache.lucene.luke.app.desktop.components.SearchPanelProvider.doSearch(SearchPanelProvider.java:516) at org.apache.lucene.luke.app.desktop.components.SearchPanelProvider.access$500(SearchPanelProvider.java:93) at org.apache.lucene.luke.app.desktop.components.SearchPanelProvider$ListenerFunctions.execSearch(SearchPanelProvider.java:672) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6539) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6304) at java.awt.Container.processEvent(Container.java:2239) at java.awt.Component.dispatchEventImpl(Component.java:4889) at java.awt.Container.dispatchEventImpl(Container.java:2297) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476) at java.awt.Container.dispatchEventImpl(Container.java:2283) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84) at java.awt.EventQueue$4.run(EventQueue.java:733) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at java.awt.EventQueue.dispatchEvent(EventQueue.java:730) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
I do have an intuition that the error here is related to parsing the query expression. I do notice that the - and / are parsed out of my original query, but I have no idea how to fix this. Any direction in the matter will be really appreciated.
Dang!! I found an answer after wrestling with it the whole day.
One cannot use the Standard Analyser or the Simple Analyser or the English Analyser with the unique identifier type queries. They parse or prune the important keyword symbols like the hyphen and/or the forward slash.
So, I imported the Keyword Analyser jars into Luke and searched the query expression using it.
The keyword analyser was downloaded and imported into Luke from here.