aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBryan Newbold <bnewbold@archive.org>2020-04-10 12:58:31 -0700
committerBryan Newbold <bnewbold@archive.org>2020-04-10 12:58:31 -0700
commit44f12b817be9d4ccd4b2c0c6ea07ea401ae86ffa (patch)
tree96198ef9af427718730c9ecc56eb731da54ba1cc
parentee53062606c6d194c52013063c4ff414fc762a00 (diff)
downloadfatcat-covid19-44f12b817be9d4ccd4b2c0c6ea07ea401ae86ffa.tar.gz
fatcat-covid19-44f12b817be9d4ccd4b2c0c6ea07ea401ae86ffa.zip
add jupyter notebook and client notes
-rw-r--r--extra/jupyter/search_example.ipynb235
-rw-r--r--notes/clients.md29
2 files changed, 264 insertions, 0 deletions
diff --git a/extra/jupyter/search_example.ipynb b/extra/jupyter/search_example.ipynb
new file mode 100644
index 0000000..cbcc9af
--- /dev/null
+++ b/extra/jupyter/search_example.ipynb
@@ -0,0 +1,235 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## COVID-19 Research Search Examples\n",
+ "\n",
+ "This python/jupyter notebook shows how to query the search.fatcat.wiki elasticsearch fulltext index.\n",
+ "\n",
+ "To run this type of code or notebook yourself, you need to have the python \"elasticsearch-dsl\" and \"matplotlib\" packages installed.\n",
+ "\n",
+ "First import dependencies and configure the elasticsearch client."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%matplotlib inline\n",
+ "import matplotlib as mpl\n",
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "import elasticsearch\n",
+ "from elasticsearch_dsl import Search\n",
+ "\n",
+ "es_client = elasticsearch.Elasticsearch(\"https://search.fatcat.wiki\")\n",
+ "es_index = \"covid19_fatcat_fulltext\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Run a simple query."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Got 10 out of 49022 total hits\n",
+ "\n",
+ "doc_id\t\t\t\ttitle\n",
+ "i73xvqp7zreszor3z5vpirlyuy\tInfectious Disease Physicians' Perspectives Regard...\n",
+ "wu5pwzu4jfb2vdyj5d6h6z2l6u\tEvidence for Amino Acid Changes in a 57-Base-Pair ...\n",
+ "mqoprn3b7baffj7b4ruy2wur4q\tCo-infection between the pandemic influenza virus ...\n",
+ "bewkfk7nwfbs3a3d4zzzrhsnye\tEvaluation of Vaccination Strategies to Suppress a...\n",
+ "czwkmvqsxnavxcexqiqtbjre2a\tActivity of Isatine-sulphadimidine Derivatives Aga...\n",
+ "32bzvm6tjzgdrp2nikgdwu6qly\tPrior infection with classical swine H1N1 influenz...\n",
+ "gfa7smnmcneyjdkhpiliqapmcq\tNewly identified epitope from SARS-CoV membrane pr...\n",
+ "macgrabykff3xj5rukqggz4qna\tFIGURE 3. Limnosida frontosa Sars, 1862 in Redescr...\n",
+ "p65ayitntvcnvlob75axp3zwwm\tCytherura Sars 1866...\n",
+ "o7lpul3ydrbdpdlgefuxwnkzxi\tThe 1918 influenza pandemic in New York City: age-...\n"
+ ]
+ }
+ ],
+ "source": [
+ "search = Search(using=es_client, index=es_index)\n",
+ "\n",
+ "# fulltext search over all \n",
+ "search.query(\n",
+ " \"query_string\",\n",
+ " query=\"pandemic ventilator\",\n",
+ " default_operator=\"AND\",\n",
+ " lenient=True,\n",
+ " fields=[\"everything\"],\n",
+ ")\n",
+ "\n",
+ "# filter to only released in the year 2010 or later\n",
+ "search = search.filter(\"range\", release_year=dict(gte=2010))\n",
+ "\n",
+ "resp = search.execute()\n",
+ "print(\"Got {} out of {} total hits\".format(len(resp), resp.hits.total))\n",
+ "print()\n",
+ "print(\"doc_id\\t\\t\\t\\ttitle\")\n",
+ "for hit in resp:\n",
+ " print(\"\\t\".join([hit.meta.id, hit.title[:50] + \"...\"]))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Run an aggregation query and do a pie chart"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "article-journal=63461\n",
+ "chapter=3996\n",
+ "dataset=3810\n",
+ "post=1468\n",
+ "article=1040\n",
+ "graphic=691\n",
+ "editorial=249\n",
+ "letter=248\n",
+ "paper-conference=229\n",
+ "thesis=146\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "<Figure size 720x720 with 1 Axes>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "search = Search(using=es_client, index=es_index)\n",
+ "\n",
+ "search.aggs.bucket('per_type', 'terms', field='release_type')\n",
+ "\n",
+ "# return no results, only the aggregation counts\n",
+ "search = search[:0]\n",
+ "\n",
+ "resp = search.execute()\n",
+ "for bucket in resp.aggregations.per_type:\n",
+ " print(f\"{bucket.key}={bucket.doc_count}\")\n",
+ "\n",
+ "counts = [b.doc_count for b in resp.aggregations.per_type]\n",
+ "labels = [b.key for b in resp.aggregations.per_type]\n",
+ "\n",
+ "\n",
+ "fig1, ax1 = plt.subplots(figsize=(10,10))\n",
+ "ax1.pie(counts, labels=labels, autopct='%1.1f%%',\n",
+ " shadow=True, startangle=90)\n",
+ "#ax1.axis('equal')\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Histogram of content by year"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "<Figure size 432x288 with 1 Axes>"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Note: SARS (SARS-CoV-1) occured in 2003; many more in-scope papers after that year\n"
+ ]
+ }
+ ],
+ "source": [
+ "search = Search(using=es_client, index=es_index)\n",
+ "\n",
+ "\n",
+ "search = search.filter('range', release_year=dict(gte=1990, lte=2020))\n",
+ "\n",
+ "search.aggs.bucket('per_year', 'terms', field='release_year', size=40)\n",
+ "\n",
+ "# return no results, only the aggregation counts\n",
+ "search = search[:0]\n",
+ "\n",
+ "#print(search.to_dict())\n",
+ "\n",
+ "resp = search.execute()\n",
+ "\n",
+ "counts = [b.doc_count for b in resp.aggregations.per_year]\n",
+ "years = [b.key for b in resp.aggregations.per_year]\n",
+ "\n",
+ "plt.bar(years, counts)\n",
+ "plt.show()\n",
+ "print(\"Note: SARS (SARS-CoV-1) occured in 2003; many more in-scope papers after that year\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/notes/clients.md b/notes/clients.md
new file mode 100644
index 0000000..807bd7f
--- /dev/null
+++ b/notes/clients.md
@@ -0,0 +1,29 @@
+
+## Python Client
+
+Install (using a virtualenv, conda, whatever):
+
+ pip install jupyter matplotlib elasticsearch-dsl
+
+
+
+## Browser Javascript
+
+In short, *direct, rich, browser search queries will not work* because browser
+HTTP GET requests do not allow bodies, and this is the mechanism Elasticsearch
+uses to send complex queries. The search.fatcat.wiki endpoint currently blocks
+all POST requests for security reasons.
+
+This includes things like the elasticsearch-js/elasticsearch-browser client,
+and use from "notebooks" like observablehq.com, jsfiddle, etc.
+
+A subset of queries may work using only GET with URL parameters, for example
+X-Pack SQL queries.
+
+The resolution for this would be to implement proper read-only filtering of ES
+requests, either with middleware or upgrading ES and configuring access
+policies properly.
+
+Note: would import with something like:
+
+ elasticsearch = require('https://bundle.run/elasticsearch-browser@16.7.1');