2018年9月5日水曜日

groonga-httpdで公開用全文検索WebAPI突貫工事

今回は急に細かい小さい話です…

 groongaには、groonga-httpd という nginx と融合したプログラムがあり、 デフォルトではhttpでフルアクセスで管理からできるようになっていますが、 検索部分だけを外出しするのは簡単です。

 /etc/groonga/httpd/groonga-httpd.conf


@@ -51,18 +51,37 @@
   # You must specify base path on memory file system for performance.
   # groonga_cache_base_path /dev/shm/groonga-httpd-cache;

+  server_tokens off;
+
+  #検索部分だけ公開するエントリ
+  server {
+    listen 50054;
+    server_name _;
+
+    # Only select command
+    location / {
+      if ($arg_q = "") {
+        return 404;
+      }
+
+      add_header Access-Control-Allow-Origin *;
+      proxy_pass http://127.0.0.1:10041/d/select?table=Item&match_columns=Terms.texts&limit=100&output_columns=_key,brand,iname,img&sort_keys=-_score&query=$arg_q;
+    }
+  }
+
+  #ここから元のエントリ(非公開ポート)
   server {
     listen 10041;
-    server_name localhost;
+    server_name localhost 127.0.0.1;

     location /d/ {
       groonga on;
....

という風にして「?q=[検索クエリ]」のURIオプションを受け入れるようにできます。

嵌ったのは、proxy_passに変数が入ってると、「localhost」の名前解決が上手く行かないので直接IPアドレスを使わなければいけない点だけでした。(nginxの何か固有の仕様?)

というわけで、とりあえず

「画像で旅する」

に全文検索機能を付けてみたメモでした。
え、mroonga? 出力時に必要な項目も一緒に入れてしまったらMySQLまで使う必要が無…

0 件のコメント:

コメントを投稿