2012-09-17 24 views
1

當我使用solruseFastVectorHighlighter = true,我得到了一些錯誤。Solr的亮點錯誤與useFastVectorHighlighter?

這裏是我的查詢日誌:

[user] webapp= path=/select params={mm=1&hl.tag.post=</b>&qf=firstName+nickName^5+lastName&hl.tag.pre=<b>&wt=javabin&hl=true&version=2&rows=100&defType=dismax&hl.highlightMultiTerm=true&hl.useFastVectorHighlighter=true&start=0&q=a+bc&hl.boundaryScanner=breakIterator} hits=3767 status=500 QTime=266 ,someone can help me? but query with abc(without blank) is ok. 



java.lang.StringIndexOutOfBoundsException: String index out of range: -6 
     at java.lang.String.substring(Unknown Source) 
     at org.apache.lucene.search.vectorhighlight.BaseFragmentsBuilder.makeFragment(BaseFragmentsBuilder.java:166) 
     at org.apache.lucene.search.vectorhighlight.BaseFragmentsBuilder.createFragments(BaseFragmentsBuilder.java:115) 
     at org.apache.lucene.search.vectorhighlight.FastVectorHighlighter.getBestFragments(FastVectorHighlighter.java:186) 
     at org.apache.solr.highlight.DefaultSolrHighlighter.doHighlightingByFastVectorHighlighter(DefaultSolrHighlighter.java:532) 
     at org.apache.solr.highlight.DefaultSolrHighlighter.doHighlighting(DefaultSolrHighlighter.java:399) 
     at org.apache.solr.handler.component.HighlightComponent.process(HighlightComponent.java:131) 
     at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:186) 
     at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:129) 
     at org.apache.solr.core.SolrCore.execute(SolrCore.java:1376) 
     at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:365) 
     at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:260) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
     at java.lang.Thread.run(Unknown Source) 

回答

0

我固定BaseFragmentsBuilder(不得不檢查開始偏移比endOffset大),並在我們的項目Artifactory的創建修補JAR。排除原來的JAR與packagingExcludes並添加已修補的一個。我用了<version>標籤像3.6.1_patched分類會更容易Maven的。

here is a link to my patched JAR.

主要是我做了一些偏差範圍檢查。 if語句修復了這個錯誤。

int startOffset = to.getStartOffset() - modifiedStartOffset[0] < 0 ? 0 : to.getStartOffset() - modifiedStartOffset[0]; 
int endOffset = to.getEndOffset() - modifiedStartOffset[0] > src.length()-1 ? src.length()-1 : to.getEndOffset() - modifiedStartOffset[0]; 
if (srcIndex < startOffset) { 
    fragment 
    .append(encoder.encodeText(src.substring(srcIndex, startOffset))) 
    .append(getPreTag(preTags, subInfo.getSeqnum())) 
    .append(encoder.encodeText(src.substring(startOffset, endOffset))) 
    .append(getPostTag(postTags, subInfo.getSeqnum())); 
} 
srcIndex = endOffset; 

希望這可以幫助您使用FastVectorHighlighter。 Cheers Marcel

+0

在[SOLR JIRA系統](https://issues.apache.org/jira/browse/SOLR-4137)上發佈了一個bugreport, – Marcel