2013-01-17 64 views
1

我在Solr schema像有场 -Solr的4.0,文本字段查询给出NullPointerException异常

Type - <fieldType name="text" class="solr.TextField" positionIncrementGap="100"/> 
Declaration - <field name="description" type="text" indexed="true" stored="true"/> 

description领域有一些文件和剩余没有数据值。 description字段中没有数据时,我不明确设置任何内容,因为它不是required字段。

问题是当我查询使用 - description:*。我得到一个NullPointerException

我还没有改变schema。另外,当我查询description:abc它适用于description:*description:abc*它给出NullPointerException

  • 这是正确的行为吗?
  • text字段在我们不需要设置时需要给出“”值吗?

例外 -

"error":{ 
    "trace":"java.lang.NullPointerException\n\tat 
     org.apache.solr.schema.TextField.analyzeMultiTerm(TextField.java:139)\n\tat org.apache.solr.search.SolrQueryParser.analyzeIfMultitermTermText(SolrQueryParser.java:147)\n\tat 
    org.apache.solr.search.SolrQueryParser.getWildcardQuery(SolrQueryParser.java:203)\n\tat 
    org.apache.lucene.queryparser.classic.QueryParserBase.handleBareTokenQuery(QueryParserBase.java:1049)\n\tat 
    org.apache.lucene.queryparser.classic.QueryParser.Term(QueryParser.java:358)\n\tat 
    org.apache.lucene.queryparser.classic.QueryParser.Clause(QueryParser.java:257)\n\tat 
    org.apache.lucene.queryparser.classic.QueryParser.Query(QueryParser.java:181)\n\tat 
    org.apache.lucene.queryparser.classic.QueryParser.TopLevelQuery(QueryParser.java:170)\n\tat 
    org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:120)\n\tat 
    org.apache.solr.search.LuceneQParser.parse(LuceneQParserPlugin.java:72)\n\tat 
    org.apache.solr.search.QParser.getQuery(QParser.java:143)\n\tat 
    org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:118)\n\tat 
    org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:185)\n\tat 
    org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:129)\n\tat 
    org.apache.solr.core.SolrCore.execute(SolrCore.java:1699)\n\tat 
    org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:455)\n\tat 
    org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:276)\n\tat 
    org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1337)\n\tat 
    org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:484)\n\tat 
    org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)\n\tat 
    org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)\n\tat 
    org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233)\n\tat 
    org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1065)\n\tat 
    org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:413)\n\tat 
    org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)\n\tat 
    org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:999)\n\tat 
    org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)\n\tat 
    org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)\n\tat 
    org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)\n\tat 
    org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)\n\tat 
    org.eclipse.jetty.server.Server.handle(Server.java:351)\n\tat 
    org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:454)\n\tat 
    org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:47)\n\tat 
    org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:890)\n\tat 
    org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:944)\n\tat 
    org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:634)\n\tat 
    org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230)\n\tat 
    org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:66)\n\tat 
    org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:254)\n\tat 
    org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)\n\tat 
    org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)\n\tat 
    java.lang.Thread.run(Thread.java:679)\n", 
      "code":500}} 

回答

1

类型为solr.TextField的字段必须与Tokenizer相关联,否则它将无法进行通配符搜索。

我创建了一个Jira错误为同一here

0

它应该工作,并没有正常工作。

你有没有机会改变字段类型定义,然后没有做一个完全重新索引(删除旧索引等)?

我以前见过这个,但在索引完全重建后似乎已经消失了。可能与Lucene级别上的剩余定义有关。

+0

没有。我重新开始,仍然是同样的问题。事实上,当我在小平面中添加相同的字段时,它给了我一个方面。但在搜索时失败。同样,如果搜索'description:'它可以工作,但是我最终添加'*'的时候会失败。 – JHS

+1

如果你可以很容易地重现它,你可能想为Solr创建一个JIRA问题。与此同时,你有没有机会为*或可能描述*提供动态的领域。试着看看是否有最小的问题。 –