[
https://issues.apache.org/jira/browse/SOLR-1404?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12751797#action_12751797
]
Igor Motov commented on SOLR-1404:
----------------------------------
First of all, HTMLStripWhitespaceTokenizerFactory is deprecated, so it might be
better to just replace it with: HTMLStripCharFilterFactory and
WhitespaceTokenizerFactory
{code:xml}
<analyzer>
<charFilter class="solr.HTMLStripCharFilterFactory" />
<tokenizer class="solr.WhitespaceTokenizerFactory" />
</analyzer>
{code}
Anyway, there seems to be a bug in reseting a token stream created by the
HTMLStripWhitespaceTokenizerFactory. That's why the test works the first time
when the token stream is created and fails the next time when it's reused. The
problem might have been introduced in revision 802286 (see
[SOLR-1343|http://issues.apache.org/jira/browse/SOLR-1343]), when
HTMLStripReader, which was a Reader, became HTMLStripCharFilter, which is
CharStream. As a result, super.reset in the following code changed from
reset(CharStream input) to reset(Reader input)
{code}
public class HTMLStripWhitespaceTokenizerFactory extends BaseTokenizerFactory {
public Tokenizer create(Reader input) {
return new WhitespaceTokenizer(new HTMLStripReader(input)) {
@Override
public void reset(Reader input) throws IOException {
super.reset(new HTMLStripReader(input));
}
};
}
}
{code}
WhitespaceTokenizer inherits from CharTokenizer. But CharTokenizer implements
only reset(Reader input) and doesn't reset the stream on reset(CharStream
input) which is now called. The simplest fix is to explicitly call
super.reset(Reader input). A better fix, perhaps, would be implementing
reset(CharStream input) in CharTokenizer in Lucene.
> Random failures with highlighting
> ---------------------------------
>
> Key: SOLR-1404
> URL: https://issues.apache.org/jira/browse/SOLR-1404
> Project: Solr
> Issue Type: Bug
> Components: Analysis, highlighter
> Affects Versions: 1.4
> Reporter: Anders Melchiorsen
> Fix For: 1.4
>
>
> With a recent Solr nightly, we started getting errors when highlighting.
> I have not been able to reduce our real setup to a minimal one that is
> failing, but the same error seems to pop up with the configuration below.
> Note that the QUERY will mostly fail, but it will work sometimes. Notably,
> after running "java -jar start.jar", the QUERY will work the first time, but
> then start failing for a while. Seems that something is not being reset
> properly.
> The example uses the deprecated HTMLStripWhitespaceTokenizerFactory but the
> problem apparently also exists with other tokenizers; I was just unable to
> create a minimal example with other configurations.
> SCHEMA
> <?xml version="1.0" encoding="UTF-8" ?>
> <schema name="example" version="1.2">
> <types>
> <fieldType name="string" class="solr.StrField" />
> <fieldtype name="testtype" class="solr.TextField">
> <analyzer>
> <tokenizer class="solr.HTMLStripWhitespaceTokenizerFactory" />
> </analyzer>
> </fieldtype>
> </types>
> <fields>
> <field name="id" type="string" indexed="true" stored="false" />
> <field name="test" type="testtype" indexed="false" stored="true" />
> </fields>
> <uniqueKey>id</uniqueKey>
> </schema>
> INDEX
> URL=http://localhost:8983/solr/update
> curl $URL --data-binary '<add><doc><field name="id">1</field><field
> name="test">test</field></doc></add>' -H 'Content-type:text/xml;
> charset=utf-8'
> curl $URL --data-binary '<commit/>' -H 'Content-type:text/xml; charset=utf-8'
> QUERY
> curl 'http://localhost:8983/solr/select/?hl.fl=test&hl=true&q=id:1'
> ERROR
> org.apache.lucene.search.highlight.InvalidTokenOffsetsException: Token test
> exceeds length of provided text sized 4
> org.apache.solr.common.SolrException:
> org.apache.lucene.search.highlight.InvalidTokenOffsetsException: Token test
> exceeds length of provided text sized 4
> at
> org.apache.solr.highlight.DefaultSolrHighlighter.doHighlighting(DefaultSolrHighlighter.java:328)
> at
> org.apache.solr.handler.component.HighlightComponent.process(HighlightComponent.java:89)
> at
> org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:195)
> at
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:131)
> at org.apache.solr.core.SolrCore.execute(SolrCore.java:1299)
> at
> org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:338)
> at
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:241)
> at
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
> at
> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
> at
> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
> at
> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> at
> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
> at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
> at
> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211)
> at
> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
> at
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
> at org.mortbay.jetty.Server.handle(Server.java:285)
> at
> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502)
> at
> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:821)
> at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:513)
> at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:208)
> at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:378)
> at
> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:226)
> at
> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
> Caused by: org.apache.lucene.search.highlight.InvalidTokenOffsetsException:
> Token test exceeds length of provided text sized 4
> at
> org.apache.lucene.search.highlight.Highlighter.getBestTextFragments(Highlighter.java:254)
> at
> org.apache.solr.highlight.DefaultSolrHighlighter.doHighlighting(DefaultSolrHighlighter.java:321)
> ... 23 more
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.