Solr:ComplexPhraseQueryParser忽略solrconfig.xml中的maxBooleanClauses值

时间:2014-10-16 14:09:31

标签: solr solr4

我尝试使用Solr ComplexPhraseQueryParser在末尾启用带通配符的短语查询, 主要是为了让自动完成功能正常工作。

所以基本上是

的输入
"how to t"

应该提出像

这样的建议
"how to test the network performance"
"how to transfer data lorem ipsum"
"how to temporary lorem ipsum"

等等。

我正在使用Solr 4.8.1。

但是,当我执行以下查询

select?q={!complexphrase}text_all_phrase:"how+to+te*"&wt=json&indent=true

无论是否

inorder= true 

inorder=false

我一直收到错误null:org.apache.lucene.search.BooleanQuery $ TooManyClauses:maxClauseCount设置为1024(s。下面的完整堆栈) 所以我用Google搜索并发现我必须调高配置值

maxBooleanClauses

在solrconfig.xml中。 所以我将其设置为1024到4096.

现在奇怪的事情开始了: 无论我设置什么值,错误都会一直显示1024作为设定值,当然也会不断出现。

还有其他人有这个问题吗? 我是否设置了错误的配置值? 我还必须在其他地方定义它吗?我找到了一些关于Lucene配置值的东西但找不到它。

非常感谢任何帮助。 请不要给我任何提示如何以不同的方式解决自动完成问题,我们已经有突出显示,建议和方面,因为所有这些对我们的客户来说还不够,我们真的希望使用ComplexPhraseQueryParser。

非常感谢,

马库斯

EDIT 我刚看到我更改的值是在solrconfig.xml的查询部分。 那是对的吗?我是否必须为ComplexPhraseQueryParser定义一个自己的部分?


更多信息:

这是我试图从schema.xml搜索的字段:

  <field name="text_all_phrase"             type="text_std_token"    indexed="true"   stored="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"   />

这是我们为该字段设置的数据类型:

 <fieldType name="text_std_token" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">      

    <tokenizer  class="solr.StandardTokenizerFactory" />
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[\\.,!;?:\&quot;]+" replacement="" />
    <filter     class="solr.LowerCaseFilterFactory" />
  </analyzer>
  <analyzer type="query">        
    <tokenizer  class="solr.StandardTokenizerFactory" />
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[\\.,!;?:\&quot;]+" replacement="" />
    <filter     class="solr.LowerCaseFilterFactory" />
  </analyzer>
</fieldType>

这是错误的完整堆栈:

null:org.apache.lucene.search.BooleanQuery$TooManyClauses: maxClauseCount is set to 1024
at org.apache.lucene.search.ScoringRewrite$1.checkMaxClauseCount(ScoringRewrite.java:72)
at org.apache.lucene.search.ScoringRewrite$ParallelArraysTermCollector.collect(ScoringRewrite.java:149)
at org.apache.lucene.search.TermCollectingRewrite.collectTerms(TermCollectingRewrite.java:79)
at org.apache.lucene.search.ScoringRewrite.rewrite(ScoringRewrite.java:105)
at org.apache.lucene.search.MultiTermQuery.rewrite(MultiTermQuery.java:288)
at org.apache.lucene.queryparser.complexPhrase.ComplexPhraseQueryParser$ComplexPhraseQuery.rewrite(ComplexPhraseQueryParser.java:275)
at org.apache.lucene.search.IndexSearcher.rewrite(IndexSearcher.java:636)
at org.apache.lucene.search.IndexSearcher.createNormalizedWeight(IndexSearcher.java:683)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:297)
at org.apache.solr.search.SolrIndexSearcher.getDocListNC(SolrIndexSearcher.java:1609)
at org.apache.solr.search.SolrIndexSearcher.getDocListC(SolrIndexSearcher.java:1397)
at org.apache.solr.search.SolrIndexSearcher.search(SolrIndexSearcher.java:478)
at org.apache.solr.handler.component.QueryComponent.process(QueryComponent.java:461)
at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:218)
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
at org.apache.solr.core.SolrCore.execute(SolrCore.java:1952)
at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:774)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:418)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:207)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:610)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:193)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

1 个答案:

答案 0 :(得分:0)

我找到了问题的原因,看起来它只是Solr版本4.8.1中的一个错误, 我升级到Solr 4.10.1,现在它至少接受我的配置值, 即使我还没有解决我的所有问题,至少问题已经消失了。