summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2018-09-04 16:55:47 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2018-09-04 16:55:47 +0200
commit5e272d966e0aeeb6d1eb9c3010e50bb0417cf140 (patch)
tree51e5752047f5a497899a4daf76c9e4b306fd30af
parent9873adc9146d0489f29a2911edf2c22f65bfa767 (diff)
downloadwww-andreasbaumann-cc-5e272d966e0aeeb6d1eb9c3010e50bb0417cf140.tar.gz
www-andreasbaumann-cc-5e272d966e0aeeb6d1eb9c3010e50bb0417cf140.tar.bz2
forgot to add slide strus webservice
-rw-r--r--content/slide/strus-webservice.md411
1 files changed, 411 insertions, 0 deletions
diff --git a/content/slide/strus-webservice.md b/content/slide/strus-webservice.md
new file mode 100644
index 0000000..2638e6e
--- /dev/null
+++ b/content/slide/strus-webservice.md
@@ -0,0 +1,411 @@
++++
+title = "strusWebService"
++++
+
+ <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/strus-webservice">http://www.andreasbaumann.cc/slide/strus-webservice</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/patrickfrey/strusWebService">http://github.com/patrickfrey/strusWebService</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>
+ <p><b>Note:</b> dead, no longer maintained or developed!!</p>
+ <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 all strus APIs, not only small part of query and storage interface</li>
+ <li>reimplementation (C++11, alternatives to cppcms?, HTTP/2.0 support? using new strusBindings)</li>
+ </ul>
+ </section>
+ </div>
+ </div>