summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2017-04-28 11:05:01 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2017-04-28 11:05:01 +0200
commitd81df3659ca6865681d22c9fa7d371f9e726ea28 (patch)
tree652d334bf3d0990536e5df7f892ac5e9efe83d3e
parentb2feb6541deab0b9b0a177ae29caebec7cd3e69f (diff)
downloadwww-andreasbaumann-cc-d81df3659ca6865681d22c9fa7d371f9e726ea28.tar.gz
www-andreasbaumann-cc-d81df3659ca6865681d22c9fa7d371f9e726ea28.tar.bz2
changed location of strusWebService slides
-rw-r--r--content/slide/_index.md2
-rw-r--r--content/slide/struswebservice.md414
2 files changed, 1 insertions, 415 deletions
diff --git a/content/slide/_index.md b/content/slide/_index.md
index 7a82f0e..ce5b956 100644
--- a/content/slide/_index.md
+++ b/content/slide/_index.md
@@ -10,6 +10,6 @@ title = "Slides"
## Strus
-* [Strus Web Service](/slide/struswebservice): a web service written
+* [Strus Web Service](http://eurospider.github.io/strusWebService/doc/slides/strus-webservice.html): a web service written
with [CppCMS](http://cppcms.com) exposing the [Strus](http://project-strus.net)
APIs as a JSON protocol similar to [Elasticsearch](http://www.elastic.co/products/elasticsearch).
diff --git a/content/slide/struswebservice.md b/content/slide/struswebservice.md
deleted file mode 100644
index 437b206..0000000
--- a/content/slide/struswebservice.md
+++ /dev/null
@@ -1,414 +0,0 @@
-+++
-title = "Strus Web Service"
-+++
-
- <div class="reveal">
-
- <!-- Any section element inside of this container is displayed as a slide -->
- <div class="slides">
- <section>
- <h1>Strus - Web Service</h1>
- <p>
- <small>Created by <a href="http://www.andreasbaumann.cc">Andreas Baumann</a></small>
- </p>
- <p>
- <small><a href="http://www.andreasbaumann.cc/slide/struswebservice">http://www.andreasbaumann.cc/slide/struswebservice</a></small>
- </p>
- <p><small>(C)2015/2016</small></p>
- </section>
-
- <section>
- <h2>Outline</h2>
- <ul>
- <li>Have a web service, language independent, for search.</li>
- <li>The software to the vision exists, it's called <b>Elasticsearch.</b></li>
- <li>Based on Lucene, so we do the same with Strus</li>
- <li>Currently there is a Java API which uses this service</li>
- </ul>
- </section>
-
- <section>
- <h2>Strus web service</h2>
- <ul>
- <li>uses JSON and HTTP GET/POST</li>
- <li>implemented using <a href="http://cppcms.com/wikipp/en/page/main">CppCMS</a></li>
- <li>uses only the <a href="http://patrickfrey.github.io/strus/doc/doxygen/html/index.html">Strus core API</a> currently</li>
- </ul>
- </section>
-
- <section>
- <h2>Design rationales</h2>
- <ul>
- <li>standard technology (HTTP, JSON)</li>
- <li>CRUD (all basic functions exists for all classes)</lib>
- <li>proxyable and securable</li>
- <li>zero-configuration</li>
- <li>scalable</li>
- <li>C++</li>
- <li>MPL v2</li>
- <li>runs on Linux, OSX, FreeBSD</li>
- </ul>
- </section>
-
- <section>
- <h2>Protocol</h2>
- <ul>
- <li>Service functions</li>
- <li>Index functions</li>
- <li>Document functions</li>
- <li>Query functions</li>
- <li>Transactions</li>
- <li>Statistics</li>
- <li>Introspection and Configuration</li>
- </ul>
- </section>
-
- <section>
- <h2>Protocol</h2>
- <ul>
- <li>Manipulate indexes:
- <pre><code class="hljs" data-trim contenteditable>
-curl -XPOST -H 'Content-Type: application/json'
-http://localhost:8080/strus/index/create/A
-'-d { "params" : { } }'
-
-{"result":"ok"}
-
-curl -XPOST http://localhost:8080/strus/index/delete/A
-{"result":"ok"}
-
-curl -XPOST http://localhost:8080/strus/index/exists/A
-{"exists":false,"result":"ok"}
-
- </code></pre>
- </li>
- </ul>
- </section>
-
- <section>
- <h2>Protocol</h2>
- <ul>
- <li>Insert document:
- <pre><code class="hljs" data-trim contenteditable>
-curl -XPOST -H 'Content-Type: application/json'
-http://localhost:8080/strus/document/insert/A
--d
-{ "doc" : { "docid" : "doc3",
- "attributes" : [
- { "key" : "title", "value" : "This is a Hello World Document" },
- { "key" : "attr1", "value" : "val1" },
- { "key" : "attr2", "value" : "val2" } ],
- "metadata" : [
- { "key" : "doclen", "value" : 23773 }, { "key" : "docweight", "value" : 3.1415 } ],
- "forward" : [
- { "type" : "word", "value" : "Hello", "pos": 1 },
- { "type" : "word", "value" : "World", "pos" : 2 } ],
- "search" : [
- { "type" : "Word", "value" : "hello", "pos": 1 },
- { "type" : "word", "value" : "world", "pos" : 2 } ] }
-}
- </code></pre>
- </li>
- </ul>
- </section>
-
- <section>
- <h2>Protocol</h2>
- <ul>
- <li>Query:
- <pre><code class="hljs" data-trim contenteditable>
-curl -XPOST -H 'Content-Type: application/json'
-http://localhost:8080/strus/query/A
--d
-{ "query": {
- "first_rank": 0,
- "nof_ranks": 20,
- "weighting": {
- "scheme": {
- "name": "bm25",
- "params": [
- {
- "key": "b",
- "value": 0.75
- },
- {
- "key": "k1",
- "value": 1.0001
- },
- {
- "key": "avgdoclen",
- "value": 11943
- }
- ]
- }
- },
- "summarizer": [
- {
- "attribute": "attribute",
- "name": "attribute",
- "params": [
- {
- "key": "name",
- "value": "docid"
- }
- ]
- }
- ],
- "features": [
- {
- "name": "feat",
- "value": {
- "term": {
- "type": "word",
- "value": "hello"
- }
- },
- "weight": 1
- },
- {
- "name": "sel",
- "value": {
- "expression": {
- "operator": "union",
- "range": 0,
- "cardinality": 0,
- "terms": [
- {
- "term": {
- "type": "word",
- "value": "hello"
- }
- }
- ]
- }
- },
- "weight": 1
- }
- ],
- "select": [
- "sel"
- ]
-}
-
-{
- "execution_time": 0.000983791,
- "ranklist": {
- "documents_ranked": 1,
- "documents_visited": 1,
- "passes_evaluated": 0,
- "ranks": [
- {
- "attributes": [
- {
- "key": "docid",
- "value": "doc3"
- }
- ],
- "docno": 1,
- "weight": 0
- }
- ]
- },
- "result": "ok"
-}
- </code></pre>
- </li>
- </ul>
- </section>
-
- <section>
- <h2>Protocol</h2>
- <ul>
- <li>Transactions:
- <pre><code class="hljs" data-trim contenteditable>
-curl -XPOST -H 'Content-Type: application/json'
-http://localhost:8080/strus/transaction/begin/A/T1
-
-curl -XPOST -H 'Content-Type: application/json'
-http://localhost:8080/strus/document/insert/A
--d
-{ "transaction" : { "id" : "T1" },
- "doc" : { "docid" : "doc1",
- ...
-}
-
-curl -XPOST -H 'Content-Type: application/json'
-http://localhost:8080/strus/transaction/commit/A/T1
- </code></pre>
- </li>
- </ul>
- </section>
-
- <section>
- <h2>Protocol</h2>
- <ul>
- <li>Introspection (document):
- <pre><code class="hljs" data-trim contenteditable>
-curl -XPOST -H 'Content-Type: application/json'
-http://localhost:8080/strus/document/get/A/doc3
-
-{
- "doc": {
- "attributes": [
- {
- "key": "attr1",
- "value": "val1"
- },
- {
- "key": "attr2",
- "value": "val2"
- },
- {
- "key": "docid",
- "value": "doc3"
- },
- {
- "key": "title",
- "value": "This is a Hello World Document"
- }
- ],
- "docno": 1,
- "forward": [
- {
- "pos": 1,
- "type": "word",
- "value": "Hello"
- },
- {
- "pos": 2,
- "type": "word",
- "value": "World"
- }
- ],
- "metadata": [
- {
- "key": "docweight",
- "value": 3.141499996185303
- },
- {
- "key": "doclen",
- "value": 23773
- },
- {
- "key": "date",
- "value": 0
- }
- ],
- "search": [
- {
- "pos": 1,
- "type": "word",
- "value": "hello"
- },
- {
- "pos": 2,
- "type": "word",
- "value": "world"
- }
- ]
- },
- "execution_time": 0.00028157,
- "result": "ok"
-}
- </code></pre>
- </li>
- </ul>
- </section>
-
- <section>
- <h2>Protocol</h2>
- <ul>
- <li>Statistics and introspection (index):
- <pre><code class="hljs" data-trim contenteditable>
-curl http://localhost:8080/strus/index/stats/A
-
-{"result":"ok","stats":{"nof_docs":1}}
-
-curl http://localhost:8080/strus/index/config/A
-
-{"config":{
- "attributes":["attr1","attr2","docid","title"],
- "metadata":[{"name":"date","type":"UInt16"},{"name":"doclen","type":"UInt16"},{"name":"docweight","type":"Float32"}],
- "types":["word"]},
-"result":"ok"}
- </code></pre>
- </li>
- </ul>
- </section>
-
- <section>
- <h2>Protocol</h2>
- <ul>
- <li>Statistics and introspection (system):
- <pre><code class="hljs" data-trim contenteditable>
-curl http://localhost:8080/strus/config
-{"config":{
- "posting_join_operators":[
- "chain","chain_struct","contains","diff","inrange","inrange_struct","intersect","pred","sequence","sequence_struct","succ","union","within","within_struct"],
- "summarizer_functions":[
- "accuvariable","attribute","matchphrase","matchpos","matchvariables","metadata"],
- "weighting_funtions":[
- "bm25","formula","metadata","td","tf"]},
-"result":"ok"}
-
- ...
- "weighting_functions": [
- {
- "description": "Calculate the document weight with the weighting scheme \"BM25\"",
- "name": "bm25",
- "parameter": [
- {
- "description": "defines the query features to weight",
- "name": "match",
- "type": "feature"
- },
- {
- "description": "parameter of the BM25 weighting scheme",
- "name": "k1",
- "type": "numeric"
- },
- ...
- </code></pre>
- </li>
- </ul>
- </section>
-
- <section>
- <h2>Strus web service</h2>
- <h3>Links</h3>
- <ul>
- <li><a href="http://github.com/Eurospider/strusWebService">http://github.com/Eurospider/strusWebService</a></li>
- <li><a href="https://build.opensuse.org/package/show/home:andreas_baumann/struswebservice">packages and builds on OBS</a></li>
- <li><a href="http://strustest.eurospider.com/strus/version">Test instance</a></li>
- <li><a href="http://strustest.eurospider.com/strus/democlient/">Simple AJAX/JS demo interface</a></li>
- </ul>
- </section>
-
- <section>
- <h2>Java API</h2>
- <ul>
- <li>Uses latest Java 1.8 (aka requires Java 1.8)</li>
- <li>Uses Jackson for POJO serialization from/to JSON</li>
- <li>uses javax.ws.rs.client web service classes for HTTP</li>
- </ul>
- </section>
-
- <section>
- <h2>Java API</h2>
- <h3>Links</h3>
- <ul>
- <li><a href="http://github.com/Eurospider/strusJavaAPI">http://github.com/Eurospider/strusJavaAPI</a></li>
- <li><a href="http://eurospider.github.io/strusJavaApi/apidocs/index.html">JavaDoc</a></li>
- </ul>
- </section>
-
- <section>
- <h2>Todos and future</h2>
- <ul>
- <li>support all functions from strus API</li>
- <li>integrate strusAnalyzer and strusStream APIs</li>
- <li>start with simple cluster mode (distribution proxy service)</li>
- </ul>
- </section>
- </div>
- </div>