I'm trying out the advice in the user guide
( 
https://lucene.apache.org/solr/guide/8_1/highlighting.html#schema-options-and-performance-considerations
 )
for using the unified highlighter.

I saw the note:
"This is definitely the fastest option for highlighting
wildcard queries on large text fields."

and decided to try this, namely:

* "set storeOffsetsWithPositions to true"
* "set termVectors to true but no other term vector
  related options on the field being highlighted"

I've set these options on two fields, but I now get an
exception during highlighting of the results of a phrase query.
(I'm not even testing with wildcards yet.)

Here's an extract of the schema before making the change:

  <field name="title" type="string" indexed="true" stored="true"/>
  <field name="fulltext" type="text_en_splitting" multiValued="true" 
indexed="true" stored="false"/>
  <copyField source="*" dest="fulltext"/>
  <field name="concept" type="string" multiValued="true" indexed="true" 
stored="true"/>
  <field name="concept_search" type="text_en_splitting" multiValued="true" 
indexed="true" stored="true"/>
  <copyField source="concept" dest="concept_search"/>

And here are the only two lines I changed:

  <field name="concept" type="string" termVectors="true" multiValued="true" 
storeOffsetsWithPositions="true" indexed="true" stored="true"/>
  <field name="concept_search" type="text_en_splitting" termVectors="true" 
multiValued="true" storeOffsetsWithPositions="true" indexed="true" 
stored="true"/>

Here's a sample minimal query that worked perfectly before making the change:

defType=edismax
q="space administration"
fl=id,title
qf=fulltext concept_search
hl=true
hl.method=unified
hl.fl=*

After making the change to the schema, I now get this exception in the Solr log:

o.a.s.s.HttpSolrCall null:java.lang.IllegalStateException: field "fulltext" was 
indexed without position data; cannot run PhraseQuery (phrase=fulltext:"space 
administr")
        at 
org.apache.lucene.search.PhraseQuery$1.getPhraseMatcher(PhraseQuery.java:446)
        at 
org.apache.lucene.search.PhraseWeight.lambda$matches$0(PhraseWeight.java:89)
        at org.apache.lucene.search.MatchesUtils.forField(MatchesUtils.java:101)
        at org.apache.lucene.search.PhraseWeight.matches(PhraseWeight.java:88)
        at 
org.apache.lucene.search.DisjunctionMaxQuery$DisjunctionMaxWeight.matches(DisjunctionMaxQuery.java:125)
        at 
org.apache.lucene.search.uhighlight.FieldOffsetStrategy.createOffsetsEnumsWeightMatcher(FieldOffsetStrategy.java:138)
        at 
org.apache.lucene.search.uhighlight.FieldOffsetStrategy.createOffsetsEnumFromReader(FieldOffsetStrategy.java:74)
        at 
org.apache.lucene.search.uhighlight.TermVectorOffsetStrategy.getOffsetsEnum(TermVectorOffsetStrategy.java:49)
        at 
org.apache.lucene.search.uhighlight.FieldHighlighter.highlightFieldForDoc(FieldHighlighter.java:76)
        at 
org.apache.lucene.search.uhighlight.UnifiedHighlighter.highlightFieldsAsObjects(UnifiedHighlighter.java:639)
        at 
org.apache.lucene.search.uhighlight.UnifiedHighlighter.highlightFields(UnifiedHighlighter.java:508)
        at 
org.apache.solr.highlight.UnifiedSolrHighlighter.doHighlighting(UnifiedSolrHighlighter.java:149)
        at 
org.apache.solr.handler.component.HighlightComponent.process(HighlightComponent.java:171)
        at 
org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:298)
        at 
org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:199)
        at org.apache.solr.core.SolrCore.execute(SolrCore.java:2566)
etc.

The response includes search results, but no highlighting information.

Of interest is that the exception is against the field "fulltext",
whose definition I _didn't_ change.

If I remove the "fulltext" field from qf, so that the query is now this:

defType=edismax
q="space administration"
fl=id,title
qf=concept_search
hl=true
hl.method=unified
hl.fl=*

the log now has this exception:

o.a.s.s.HttpSolrCall null:java.lang.IllegalStateException: field 
"concept_search" was indexed without position data; cannot run PhraseQuery 
(phrase=concept_search:"space administr")
        at 
org.apache.lucene.search.PhraseQuery$1.getPhraseMatcher(PhraseQuery.java:446)
        at 
org.apache.lucene.search.PhraseWeight.lambda$matches$0(PhraseWeight.java:89)
        at org.apache.lucene.search.MatchesUtils.forField(MatchesUtils.java:101)
        at org.apache.lucene.search.PhraseWeight.matches(PhraseWeight.java:88)
        at 
org.apache.lucene.search.uhighlight.FieldOffsetStrategy.createOffsetsEnumsWeightMatcher(FieldOffsetStrategy.java:138)
        at 
org.apache.lucene.search.uhighlight.FieldOffsetStrategy.createOffsetsEnumFromReader(FieldOffsetStrategy.java:74)
        at 
org.apache.lucene.search.uhighlight.TermVectorOffsetStrategy.getOffsetsEnum(TermVectorOffsetStrategy.java:49)
        at 
org.apache.lucene.search.uhighlight.FieldHighlighter.highlightFieldForDoc(FieldHighlighter.java:76)
        at 
org.apache.lucene.search.uhighlight.UnifiedHighlighter.highlightFieldsAsObjects(UnifiedHighlighter.java:639)
        at 
org.apache.lucene.search.uhighlight.UnifiedHighlighter.highlightFields(UnifiedHighlighter.java:508)
        at 
org.apache.solr.highlight.UnifiedSolrHighlighter.doHighlighting(UnifiedSolrHighlighter.java:149)
        at 
org.apache.solr.handler.component.HighlightComponent.process(HighlightComponent.java:171)
        at 
org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:298)
        at 
org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:199)
        at org.apache.solr.core.SolrCore.execute(SolrCore.java:2566)
etc.

i.e., so I now get an error about the field that I _did_ change.

(I'm using Solr 8.1.1.)


Reply via email to