Solr:complexprasequeryparser忽略solrconfig.xml中的MaxBooleanClances值

Solr:complexprasequeryparser忽略solrconfig.xml中的MaxBooleanClances值,solr,solr4,Solr,Solr4,我尝试使用Solr ComplexPhraseQueryParser来启用最后带有通配符的短语查询, 主要是为了让自动完成功能正常工作 所以基本上是一个 "how to t" 你应该提出类似的建议 "how to test the network performance" "how to transfer data lorem ipsum" "how to temporary lorem ipsum" 等等 我使用的是Solr4.8.1 但是,当我执行以下查询时 select?q={!com

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

所以基本上是一个

"how to t"
你应该提出类似的建议

"how to test the network performance"
"how to transfer data lorem ipsum"
"how to temporary lorem ipsum"
等等

我使用的是Solr4.8.1

但是,当我执行以下查询时

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

inorder= true 

我不断得到错误null:org.apache.lucene.search.BooleanQuery$TooManyClauses:maxClauseCount设置为1024(下面是完整堆栈) 所以我在谷歌上搜索,发现我必须打开配置值

maxBooleanClauses
在solrconfig.xml中。 所以我把它从1024调成4096

现在奇怪的事情开始了: 不管我设置了什么值,错误总是显示1024作为设置值,当然也会不断发生

还有其他人有这个问题吗? 我是否设置了错误的配置值? 我是否也需要在其他地方定义它?我找到了一些关于Lucene配置值的信息,但找不到

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

非常感谢

马库斯

编辑 我刚刚看到我更改的值位于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"   />

我找到了问题的原因,似乎只是Solr版本4.8.1中的一个bug, 我升级到Solr 4.10.1,现在它至少接受我的配置值, 虽然我还没有解决所有的问题,但至少问题已经解决了

  <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)