文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

solr3.6のpingのエラー:org.apache.solr.common.SolrException: undefined field text

またこのエラーがでたのでまとめます。
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();を実行してみましたが、正常実行できました。
それにしても初期設定には色々な罠が潜んでいるので、注意が必要ですね。。