diff options
Diffstat (limited to 'docs/examples/search_json_examples.ipynb')
-rw-r--r-- | docs/examples/search_json_examples.ipynb | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/docs/examples/search_json_examples.ipynb b/docs/examples/search_json_examples.ipynb new file mode 100644 index 0000000..6673663 --- /dev/null +++ b/docs/examples/search_json_examples.ipynb @@ -0,0 +1,214 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Indexing / querying JSON documents\n", + "## Adding a JSON document to an index" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "b'OK'" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import redis\n", + "from redis.commands.json.path import Path\n", + "import redis.commands.search.aggregation as aggregations\n", + "import redis.commands.search.reducers as reducers\n", + "from redis.commands.search.field import TextField, NumericField, TagField\n", + "from redis.commands.search.indexDefinition import IndexDefinition, IndexType\n", + "from redis.commands.search.query import NumericFilter, Query\n", + "\n", + "\n", + "r = redis.Redis(host='localhost', port=36379)\n", + "user1 = {\n", + " \"user\":{\n", + " \"name\": \"Paul John\",\n", + " \"email\": \"paul.john@example.com\",\n", + " \"age\": 42,\n", + " \"city\": \"London\"\n", + " }\n", + "}\n", + "user2 = {\n", + " \"user\":{\n", + " \"name\": \"Eden Zamir\",\n", + " \"email\": \"eden.zamir@example.com\",\n", + " \"age\": 29,\n", + " \"city\": \"Tel Aviv\"\n", + " }\n", + "}\n", + "user3 = {\n", + " \"user\":{\n", + " \"name\": \"Paul Zamir\",\n", + " \"email\": \"paul.zamir@example.com\",\n", + " \"age\": 35,\n", + " \"city\": \"Tel Aviv\"\n", + " }\n", + "}\n", + "r.json().set(\"user:1\", Path.rootPath(), user1)\n", + "r.json().set(\"user:2\", Path.rootPath(), user2)\n", + "r.json().set(\"user:3\", Path.rootPath(), user3)\n", + "\n", + "schema = (TextField(\"$.user.name\", as_name=\"name\"),TagField(\"$.user.city\", as_name=\"city\"), NumericField(\"$.user.age\", as_name=\"age\"))\n", + "r.ft().create_index(schema, definition=IndexDefinition(prefix=[\"user:\"], index_type=IndexType.JSON))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Searching" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Simple search" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Result{2 total, docs: [Document {'id': 'user:1', 'payload': None, 'json': '{\"user\":{\"name\":\"Paul John\",\"email\":\"paul.john@example.com\",\"age\":42,\"city\":\"London\"}}'}, Document {'id': 'user:3', 'payload': None, 'json': '{\"user\":{\"name\":\"Paul Zamir\",\"email\":\"paul.zamir@example.com\",\"age\":35,\"city\":\"Tel Aviv\"}}'}]}" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "r.ft().search(\"Paul\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Filtering search results" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Result{1 total, docs: [Document {'id': 'user:3', 'payload': None, 'json': '{\"user\":{\"name\":\"Paul Zamir\",\"email\":\"paul.zamir@example.com\",\"age\":35,\"city\":\"Tel Aviv\"}}'}]}" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "q1 = Query(\"Paul\").add_filter(NumericFilter(\"age\", 30, 40))\n", + "r.ft().search(q1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Projecting using JSON Path expressions " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Document {'id': 'user:1', 'payload': None, 'city': 'London'},\n", + " Document {'id': 'user:3', 'payload': None, 'city': 'Tel Aviv'}]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "r.ft().search(Query(\"Paul\").return_field(\"$.user.city\", as_field=\"city\")).docs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aggregation" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[[b'age', b'35'], [b'age', b'42']]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "req = aggregations.AggregateRequest(\"Paul\").sort_by(\"@age\")\n", + "r.ft().aggregate(req).rows" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "d45c99ba0feda92868abafa8257cbb4709c97f1a0b5dc62bbeebdf89d4fad7fe" + }, + "kernelspec": { + "display_name": "Python 3.8.12 64-bit ('venv': venv)", + "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.8.12" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} |