0

在过去的几天里,我使用 solr 4.1.0 迈出了第一步。到目前为止,我没有任何问题,并且总能找到解决方案,主要是在这个伟大的平台上。

我正在使用来自 solr 的示例配置和我自己的字段。我正在用 tika 索引文件并向文档中添加额外的字段。

我的问题是突出显示:默认情况下,solr 在突出显示(如果启用)中只返回一次命中。我想拥有它们(-1 不像在 maxAnalyzedChars 中那样工作,所以我改用 9999)。

我已更改(添加)以下默认值:

<int name="f.text.hl.maxAnalyzedChars">-1</int>
<str name="f.text.hl.snippets">9999</str>

在 solrconfig.xml 中:

<requestHandler name="/select" class="solr.SearchHandler">...</requestHandler>

现在,如果我使用诸如“*”之类的占位符进行搜索,即“wordtofind*”,solr 服务器将引发以下异常:

SEVERE: java.io.IOException: Stream closed
        at java.io.StringReader.ensureOpen(Unknown Source)
        at java.io.StringReader.read(Unknown Source)
        at org.apache.lucene.analysis.standard.StandardTokenizerImpl.zzRefill(StandardTokenizerImpl.java:923)
        at org.apache.lucene.analysis.standard.StandardTokenizerImpl.getNextToken(StandardTokenizerImpl.java:1133)
        at org.apache.lucene.analysis.standard.StandardTokenizer.incrementToken(StandardTokenizer.java:180)
        at org.apache.lucene.analysis.util.FilteringTokenFilter.incrementToken(FilteringTokenFilter.java:50)
        at org.apache.lucene.analysis.core.LowerCaseFilter.incrementToken(LowerCaseFilter.java:54)
        at org.apache.solr.highlight.TokenOrderingFilter.incrementToken(DefaultSolrHighlighter.java:633)
        at org.apache.lucene.analysis.CachingTokenFilter.fillCache(CachingTokenFilter.java:90)
        at org.apache.lucene.analysis.CachingTokenFilter.incrementToken(CachingTokenFilter.java:55)
        at org.apache.lucene.search.highlight.Highlighter.getBestTextFragments(Highlighter.java:221)
        at org.apache.solr.highlight.DefaultSolrHighlighter.doHighlightingByHighlighter(DefaultSolrHighlighter.java:498)
        at org.apache.solr.highlight.DefaultSolrHighlighter.doHighlighting(DefaultSolrHighlighter.java:391)
        at org.apache.solr.handler.component.HighlightComponent.process(HighlightComponent.java:139)
        at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:208)
        at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
        at org.apache.solr.core.SolrCore.execute(SolrCore.java:1816)
        at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:448)
        at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:269)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560)
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
        at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
        at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
        at org.eclipse.jetty.server.Server.handle(Server.java:365)
        at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485)
        at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)
        at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:937)
        at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:998)
        at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:856)
        at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
        at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)
        at org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
        at java.lang.Thread.run(Unknown Source)

感谢您提供任何有用的提示!

忍者

4

1 回答 1

0

尝试将 maxAnalyzedChars 从 -1 更改为 2147483647。我通过使用 Java 客户端 Solrj 尝试查询时偶然发现了这一点。我尝试了 Integer.MAX_VALUE 常量(即 2^31-1 = 2147483647)并且它起作用了。添加 +1 (=2147483648) 不会。希望有帮助!

于 2013-03-13T20:57:48.117 回答