SolrをJSONで使うときにはまったことのメモ

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

more…

jQuery.ajax関数のsuccessコールバック内でHTTPリダイレクトか否かを判定する方法


jQueryの$.ajaxのsuccessコールバックを使用している。サーバ側で、ステータスコード2XXで通常の応答をする場合と、3XXでリダイレクトする場合がある。しかし、successコールバックは、リダイレクトか否かを区別できない。リダイレクトである場合は、リダイレクトされたページのデータがsuccessコールバックの第一引数に渡ってくるからである。これは、ajaxが使用するXMLHttpRequestの動作に由来するようだ。動作を図にすると次のような感じになる。

 

調べてみたところ、ここに同じような質問があり、hackではあるが、リダイレクトされたページだけに含まれるデータの存在をsuccessコールバックで確認することで、リダイレクトか否かを判定するというアイディアがあった。この方法だと、あらかじめリダイレクト後のページの情報を知っている必要があるが、今回の場合は十分だった。ほかにも、カスタムヘッダを送り返し、それを確認してwindow.locationでクライアント側で別ページに移動するというアイディアもあった。

more…