SolrException: undefined field text錯誤如何解決?


點開錯誤后會看到如下的詳細信息:

org.apache.solr.common.SolrException: undefined field text at org.apache.solr.schema.IndexSchema.getDynamicFieldType(IndexSchema.java:1308) at org.apache.solr.schema.IndexSchema$SolrQueryAnalyzer.getWrappedAnalyzer(IndexSchema.java:452) at org.apache.lucene.analysis.DelegatingAnalyzerWrapper$DelegatingReuseStrategy.getReusableComponents(DelegatingAnalyzerWrapper.java:84) at org.apache.lucene.analysis.Analyzer.tokenStream(Analyzer.java:191) at org.apache.lucene.util.QueryBuilder.createFieldQuery(QueryBuilder.java:206) at org.apache.solr.parser.SolrQueryParserBase.newFieldQuery(SolrQueryParserBase.java:371) at org.apache.solr.parser.SolrQueryParserBase.getFieldQuery(SolrQueryParserBase.java:741) at org.apache.solr.parser.SolrQueryParserBase.handleBareTokenQuery(SolrQueryParserBase.java:529) at org.apache.solr.parser.QueryParser.Term(QueryParser.java:309) at org.apache.solr.parser.QueryParser.Clause(QueryParser.java:180) at org.apache.solr.parser.QueryParser.Query(QueryParser.java:101) at org.apache.solr.parser.QueryParser.TopLevelQuery(QueryParser.java:90) at org.apache.solr.parser.SolrQueryParserBase.parse(SolrQueryParserBase.java:152) at org.apache.solr.search.LuceneQParser.parse(LuceneQParser.java:50) at org.apache.solr.search.QParser.getQuery(QParser.java:140) at org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:161) at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:269) at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:153) at org.apache.solr.core.SolrCore.execute(SolrCore.java:2213) at org.apache.solr.core.QuerySenderListener.newSearcher(QuerySenderListener.java:72) at org.apache.solr.core.SolrCore.lambda$getSearcher$3(SolrCore.java:1988) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor.lambda$execute$0(ExecutorUtil.java:229) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

錯誤的原因。我們是把solr的例子復制粘貼出來,在此基礎上修改的。solr的例子里面配置了一個名為text的field。並且在配置文件里面把這個field默認進行查詢的field。這表示什么呢?你記得在查詢頁面,有個df參數吧?這個df表示默認查詢的field,有了這個屬性后,你不需要在q參數里面按照 fieldName:fieldValue 的格式傳值,直接在q參數里面傳值就行。solr6.3服務器會把q的值作為df指定的field來搜索。 

舉個例子:http://localhost:8983/solr/db4/select?df=zcq&indent=on&q=1&wt=json 就是按照 zcq:*1* 的查詢條件進行查詢。solr例子在配置文件里面配置了df參數的默認值。這個默認值就是text。這也就是說,如果我們在q參數里面不寫格式,直接傳值,而且df參數沒傳值的話,solr服務器會默認按照 text:value 的條件搜索。如果你沒有在db-data-config.xml和managed-schema里面加入text域,就會爆出本文討論的錯誤。

解決這個錯誤有兩種辦法:

第一種。把你要全文搜索的field命名為text,這種做法可以利用了例子里面已經有的配置,比較簡便。

第二種。打開solrconfig.xml 文件,搜索df。可以發現requestHandler標簽里面,會存在name屬性是df的子標簽,這些標簽對的內容是text。比如:

<requestHandler name="/select" class="solr.SearchHandler"> <lst name="defaults"> <str name="echoParams">explicit</str> <int name="rows">10</int> <str name="df">text</str> </lst> </requestHandler>

注意里面的 <str name="df">text</str> ,直接改成<str name="df">zcq</str> 就行。solrconfig.xml 文件中所有的地方都改過來,再重啟solr服務器,就不報這個錯誤了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM