diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2017-04-28 11:05:01 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2017-04-28 11:05:01 +0200 |
commit | d81df3659ca6865681d22c9fa7d371f9e726ea28 (patch) | |
tree | 652d334bf3d0990536e5df7f892ac5e9efe83d3e | |
parent | b2feb6541deab0b9b0a177ae29caebec7cd3e69f (diff) | |
download | www-andreasbaumann-cc-d81df3659ca6865681d22c9fa7d371f9e726ea28.tar.gz www-andreasbaumann-cc-d81df3659ca6865681d22c9fa7d371f9e726ea28.tar.bz2 |
changed location of strusWebService slides
-rw-r--r-- | content/slide/_index.md | 2 | ||||
-rw-r--r-- | content/slide/struswebservice.md | 414 |
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> |