またこのエラーがでたのでまとめます。
2箇所で「org.apache.solr.common.SolrException: undefined field text」が起きました。
solr adminのping
solr adminで [ping] を押下すると以下のようなエラーが起きました。
HTTPステータス 500 - Ping query caused exception: undefined field text org.apache.solr.common.SolrException: Ping query caused exception: undefined field text at
solrjのsolrServer.ping()
solrjで以下のようにpingを実行すると、
SolrServer solrServer = new LBHttpSolrServer("http://localhost:8080/test/character/"); try { solrServer.ping(); } catch (IOException e) { e.printStackTrace(); }
catalina.outに以下のようなエラーが起きました。
致命的: org.apache.solr.common.SolrException: Ping query caused exception: undefined field text
原因の特定
スキーマの話ではないので、solrconfig.xmlをジーーーッと見てみます。
<requestHandler name="/admin/ping" class="solr.PingRequestHandler"> <lst name="invariants"> <str name="q">solrpingquery</str> </lst> <lst name="defaults"> <str name="echoParams">all</str> </lst> </requestHandler>
またお前か!!
firstSearcherの時と同様、pingを実行する時のクエリが「solrpingquery」という文字列になっているため、
そんなfieldは無いよ、と言われています。
対策
修正するには以下のようにします。
<str name="q">*:*</str><!-- これは大量の結果が返るので、適宜最適なクエリに書き換えましょう -->
修正後tomcatを起動して、solr adminのpingを実行してみます。
<response> <lst name="responseHeader"> <int name="status">0</int> <int name="QTime">1</int> <lst name="params"> <str name="df">text</str> <str name="echoParams">all</str> <str name="rows">10</str> <str name="echoParams">all</str> <str name="q">*:*</str> </lst> </lst> <str name="status">OK</str> </response>
よし。
続いてsolrServer.ping();を実行してみましたが、正常実行できました。
それにしても初期設定には色々な罠が潜んでいるので、注意が必要ですね。。