[Groonga-commit] droonga/droonga.org at e2dfcfc [gh-pages] Reorganize to extract practical example

Zurück zum Archiv-Index

Yoji Shidara null+****@clear*****
Thu Feb 6 15:14:26 JST 2014


Yoji Shidara	2014-02-06 15:14:26 +0900 (Thu, 06 Feb 2014)

  New Revision: e2dfcfc35446142a371586dbe6a70b1a2d7ea48d
  https://github.com/droonga/droonga.org/commit/e2dfcfc35446142a371586dbe6a70b1a2d7ea48d

  Message:
    Reorganize to extract practical example

  Modified files:
    tutorial/plugin-development/input-output/index.md

  Modified: tutorial/plugin-development/input-output/index.md (+117 -81)
===================================================================
--- tutorial/plugin-development/input-output/index.md    2014-02-06 15:50:13 +0900 (55c9145)
+++ tutorial/plugin-development/input-output/index.md    2014-02-06 15:14:26 +0900 (cc3c570)
@@ -215,87 +215,6 @@ And restart fluentd. After restart, the response always includes only one record
 
 Note that `count` is still `2` because `limit` does not affect `count`. See [search][] for details of `search` command.
 
-### Defining original command
-
-You may feel the Droonga's `search` command is too flexible for your purpose. Here, we're going to add our own `storeSearch` command to wrap the `search` command in order to provide an application-specific and simple interface.
-
-Update your `ExampleInputAdapterPlugin` as follows:
-
-lib/droonga/plugin/input_adapter/example.rb:
-
-~~~ruby
-module Droonga
-  class ExampleInputAdapterPlugin < Droonga::InputAdapterPlugin
-    repository.register("example", self)
-
-    command "storeSearch" => :adapt_request
-    def adapt_request(input_message)
-      $log.info "ExampleInputAdapterPlugin", :message => input_message
-
-      query = input_message.body["query"]
-      $log.info "storeSearch", :query => query
-
-      body = {
-        "queries" => {
-          "result" => {
-            "source" => "Store",
-            "condition" => {
-              "query" => query,
-              "matchTo" => "_key"
-            },
-            "output" => {
-              "elements" => [
-                "startTime",
-                "elapsedTime",
-                "count",
-                "attributes",
-                "records"
-              ],
-              "attributes" => [
-                "_key"
-              ],
-              "limit" => -1
-            }
-          }
-        }
-      }
-
-      input_message.command = "search"
-      input_message.body = body
-    end
-  end
-end
-~~~
-
-Now you can use this by the following request:
-
-store-search-columbus.json:
-
-~~~json
-{
-  "id": "storeSearch:0",
-  "dataset": "Starbucks",
-  "type": "storeSearch",
-  "replyTo":"localhost:24224/output",
-  "body": {
-    "query": "Columbus"
-  }
-}
-~~~
-
-In order to use this issue, you need to run:
-
-    cat store-search-columbus.json | tr -d "\n" | fluent-cat starbucks.message
-
-And you will see the result on fluentd's log:
-
-~~~
-2014-02-06 12:49:24 +0900 [info]: ExampleInputAdapterPlugin message=#<Droonga::InputMessage:0x007f91f5f87210 @raw_message={"body"=>{"query"=>"Columbus"}, "replyTo"=>{"type"=>"storeSearch.result", "to"=>"localhost:24224/output"}, "type"=>"storeSearch", "dataset"=>"Starbucks", "id"=>"storeSearch:0"}>
-2014-02-06 12:49:24 +0900 [info]: storeSearch query="Columbus"
-2014-02-06 12:49:24 +0900 output.message: {"inReplyTo":"storeSearch:0","statusCode":200,"type":"storeSearch.result","body":{"result":{"count":2,"records":[["2 Columbus Ave. - New York NY  (W)"],["Columbus @ 67th - New York NY  (W)"]]}}}
-~~~
-
-In the way just described, we can use `storeSearch` to implement the application specific search logic.
 
 
 ## OutputAdapter
@@ -437,6 +356,123 @@ The results will be like this:
 
 Now you can see `completedAt` attribute containing the time completed the request.
 
+## Combination of InputAdapter and OutputAdapter
+
+We have learned the basics of Adapter so far.
+Let's try to build more practical plugin.
+
+You may feel the Droonga's `search` command is too flexible for your purpose. Here, we're going to add our own `storeSearch` command to wrap the `search` command in order to provide an application-specific and simple interface.
+
+### Accept simple requests
+
+First, create StorSearchAdapterInputPlugin.
+
+Update your `StoreSearchAdapterPlugin` as follows:
+
+lib/droonga/plugin/input_adapter/store_search.rb:
+
+~~~ruby
+module Droonga
+  class StoreSearchInputAdapterPlugin < Droonga::InputAdapterPlugin
+    repository.register("store_search", self)
+
+    command "storeSearch" => :adapt_request
+    def adapt_request(input_message)
+      $log.info "StoreSearchInputAdapterPlugin", :message => input_message
+
+      query = input_message.body["query"]
+      $log.info "storeSearch", :query => query
+
+      body = {
+        "queries" => {
+          "result" => {
+            "source" => "Store",
+            "condition" => {
+              "query" => query,
+              "matchTo" => "_key"
+            },
+            "output" => {
+              "elements" => [
+                "startTime",
+                "elapsedTime",
+                "count",
+                "attributes",
+                "records"
+              ],
+              "attributes" => [
+                "_key"
+              ],
+              "limit" => -1
+            }
+          }
+        }
+      }
+
+      input_message.command = "search"
+      input_message.body = body
+    end
+  end
+end
+~~~
+
+The update catalog.json to activate the plugin. Remove the example plugin previously created.
+
+catalog.json:
+
+~~~
+(snip)
+  },
+  "input_adapter": {
+    "plugins": ["store_search"]
+  },
+  "output_adapter": {
+    "plugins": ["crud", "groonga"]
+  },
+  "collector": {
+    "plugins": ["basic", "search"]
+  },
+  "distributor": {
+    "plugins": ["search", "crud", "groonga", "watch"]
+  }
+}
+~~~
+
+
+Now you can use this by the following request:
+
+store-search-columbus.json:
+
+~~~json
+{
+  "id": "storeSearch:0",
+  "dataset": "Starbucks",
+  "type": "storeSearch",
+  "replyTo":"localhost:24224/output",
+  "body": {
+    "query": "Columbus"
+  }
+}
+~~~
+
+In order to issue this request, you need to run:
+
+    cat store-search-columbus.json | tr -d "\n" | fluent-cat starbucks.message
+
+And you will see the result on fluentd's log:
+
+~~~
+2014-02-06 12:49:24 +0900 [info]: ExampleInputAdapterPlugin message=#<Droonga::InputMessage:0x007f91f5f87210 @raw_message={"body"=>{"query"=>"Columbus"}, "replyTo"=>{"type"=>"storeSearch.result", "to"=>"localhost:24224/output"}, "type"=>"storeSearch", "dataset"=>"Starbucks", "id"=>"storeSearch:0"}>
+2014-02-06 12:49:24 +0900 [info]: storeSearch query="Columbus"
+2014-02-06 12:49:24 +0900 output.message: {"inReplyTo":"storeSearch:0","statusCode":200,"type":"storeSearch.result","body":{"result":{"count":2,"records":[["2 Columbus Ave. - New York NY  (W)"],["Columbus @ 67th - New York NY  (W)"]]}}}
+~~~
+
+In the way just described, we can use `storeSearch` to implement the application specific search logic.
+
+## Return simple response
+
+TODO
+
+
 ## Conclusion
 
 We have learned how to create InputAdapter and OutputAdapter, how to receive and modify messages in the adapters, both of InputAdapter and OutputAdapter.
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Zurück zum Archiv-Index