Apache Solrの検索機能を試してみた。自作Lispアプリからdrakmaを使用してJSONによりデータを追加しようとした。

結論からすると、Solrは、JSONの文字列は、シングルクオートではなく、ダブルクオートでないとエラーになる。


自分の調べた範囲では、JSONとしてはシングルクオートでもダブルクオートでも文字列としてvalidである(らしい)ので、これはSolr側の問題であると思う。


Parenscriptを使用して文字列を作ると、シングルクオートで囲われてしまう。代わりに、CL-JSONを使用することにした。こちらはなかなか使い方が難しかったが、


(defun get-insert-answer-json (id uid qid ans)
  (with-output-to-string (stream)
     (json:with-object (stream)
       (json:as-object-member (:add stream)
(json:with-object (stream)
  (json:encode-object-member "doc"
     `((id . ,id) (uid_i . ,uid) (tp_i . 2) (qid_i . ,qid) (a_t . ,ans))
     stream))))))

こんな感じで、Solrに追加するJSON文字列を作ることができた。REPLから
(get-insert-answer-json 1 3 4 "hogebar")
とすると、
"{\"add\":{\"doc\":{\"id\":1,\"uid_i\":3,\"tp_i\":2,\"qid_i\":4,\"a_t\":\"hogebar\"}}}"
と出力される。これでOK。

Comments