[doc] add blog post about SQL servers
Modified merge of [22a79a4] from searx.
[22a79a4] 22a79a4896
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
			
			
This commit is contained in:
		
							parent
							
								
									87a01a1736
								
							
						
					
					
						commit
						e7a4d0961b
					
				| @ -13,3 +13,4 @@ Blog | ||||
|    private-engines | ||||
|    command-line-engines | ||||
|    search-indexer-engines | ||||
|    sql-engines | ||||
|  | ||||
							
								
								
									
										160
									
								
								docs/blog/sql-engines.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										160
									
								
								docs/blog/sql-engines.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,160 @@ | ||||
| =========== | ||||
| SQL engines | ||||
| =========== | ||||
| 
 | ||||
| .. sidebar:: further read | ||||
| 
 | ||||
|    - `SQLite <https://www.sqlite.org/index.html>`_ | ||||
|    - `PostgreSQL <https://www.postgresql.org>`_ | ||||
|    - `MySQL <https://www.mysql.com>`_ | ||||
| 
 | ||||
| With the *SQL engines* you can bind SQL databases into SearxNG.  The following | ||||
| Relational Database Management System (RDBMS) are supported: | ||||
| 
 | ||||
| - :ref:`engine sqlite` | ||||
| - :ref:`engine postgresql` | ||||
| - :ref:`engine mysql_server` | ||||
| 
 | ||||
| All of the engines above are just commented out in the :origin:`settings.yml | ||||
| <searx/settings.yml>`, as you have to set the required attributes for the | ||||
| engines, e.g. ``database:`` ... | ||||
| 
 | ||||
| .. code:: yaml | ||||
| 
 | ||||
|    - name: ... | ||||
|      engine: {sqlite|postgresql|mysql_server} | ||||
|      database: ... | ||||
|      result_template: {template_name} | ||||
|      query_str: ... | ||||
| 
 | ||||
| By default, the engines use the ``key-value`` template for displaying results / | ||||
| see :origin:`oscar <searx/templates/oscar/result_templates/key-value.html>` & | ||||
| :origin:`simple <searx/templates/simple/result_templates/key-value.html>` | ||||
| themes.  If you are not satisfied with the original result layout, you can use | ||||
| your own template, set ``result_template`` attribute to ``{template_name}`` and | ||||
| place the templates at:: | ||||
| 
 | ||||
|   searx/templates/{theme_name}/result_templates/{template_name} | ||||
| 
 | ||||
| As mentioned in previous blog posts, if you do not wish to expose these engines | ||||
| on a public instance, you can still add them and limit the access by setting | ||||
| ``tokens`` as described in section :ref:`private engines`. | ||||
| 
 | ||||
| Configure the engines | ||||
| ===================== | ||||
| 
 | ||||
| The configuration of the new database engines are similar.  You must put a valid | ||||
| SQL-SELECT query in ``query_str``.  At the moment you can only bind at most one | ||||
| parameter in your query.  By setting the attribute ``limit`` you can define how | ||||
| many results you want from the SQL server.  Basically, it is the same as the | ||||
| ``LIMIT`` keyword in SQL. | ||||
| 
 | ||||
| Please, do not include ``LIMIT`` or ``OFFSET`` in your SQL query as the engines | ||||
| rely on these keywords during paging.  If you want to configure the number of | ||||
| returned results use the option ``limit``. | ||||
| 
 | ||||
| .. _engine sqlite: | ||||
| 
 | ||||
| SQLite | ||||
| ------ | ||||
| 
 | ||||
| .. _MediathekView: https://mediathekview.de/ | ||||
| 
 | ||||
| SQLite is a small, fast and reliable SQL database engine.  It does not require | ||||
| any extra dependency.  To demonstrate the power of database engines, here is a | ||||
| more complex example which reads from a MediathekView_ (DE) movie database.  For | ||||
| this example of the SQlite engine download the database: | ||||
| 
 | ||||
| - https://liste.mediathekview.de/filmliste-v2.db.bz2 | ||||
| 
 | ||||
| and unpack into ``searx/data/filmliste-v2.db``.  To search the database use e.g | ||||
| Query to test: ``!mediathekview concert`` | ||||
| 
 | ||||
| .. code:: yaml | ||||
| 
 | ||||
|    - name: mediathekview | ||||
|      engine: sqlite | ||||
|      disabled: False | ||||
|      categories: general | ||||
|      result_template: default.html | ||||
|      database: searx/data/filmliste-v2.db | ||||
|      query_str:  >- | ||||
|        SELECT title || ' (' || time(duration, 'unixepoch') || ')' AS title, | ||||
|               COALESCE( NULLIF(url_video_hd,''), NULLIF(url_video_sd,''), url_video) AS url, | ||||
|               description AS content | ||||
|          FROM film | ||||
|         WHERE title LIKE :wildcard OR description LIKE :wildcard | ||||
|         ORDER BY duration DESC | ||||
| 
 | ||||
| 
 | ||||
| Extra Dependencies | ||||
| ------------------ | ||||
| 
 | ||||
| For using :ref:`engine postgresql` or :ref:`engine mysql_server` you need to | ||||
| install additional packages in Python's Virtual Environment of your SearxNG | ||||
| instance.  To switch into the environment (:ref:`searx-src`) you can use | ||||
| :ref:`searx.sh`:: | ||||
| 
 | ||||
|   $ sudo utils/searx.sh shell | ||||
|   (searx-pyenv)$ pip install ... | ||||
| 
 | ||||
| 
 | ||||
| .. _engine postgresql: | ||||
| 
 | ||||
| PostgreSQL | ||||
| ---------- | ||||
| 
 | ||||
| .. _psycopg2: https://www.psycopg.org/install | ||||
| 
 | ||||
| .. sidebar:: requirements | ||||
| 
 | ||||
|    ``pip install`` psycopg2_ | ||||
| 
 | ||||
| PostgreSQL is a powerful and robust open source database.  Before configuring | ||||
| the PostgreSQL engine, you must install the dependency ``psychopg2``.  You can | ||||
| find an example configuration below: | ||||
| 
 | ||||
| .. code:: yaml | ||||
| 
 | ||||
|    - name: my_database | ||||
|      engine: postgresql | ||||
|      database: my_database | ||||
|      username: searx | ||||
|      password: password | ||||
|      query_str: 'SELECT * from my_table WHERE my_column = %(query)s' | ||||
| 
 | ||||
| .. _engine mysql_server: | ||||
| 
 | ||||
| MySQL | ||||
| ----- | ||||
| 
 | ||||
| .. _mysql-connector-python: https://pypi.org/project/mysql-connector-python | ||||
| 
 | ||||
| .. sidebar:: requirements | ||||
| 
 | ||||
|    ``pip install`` mysql-connector-python_ | ||||
| 
 | ||||
| MySQL is said to be the most popular open source database. Before enabling MySQL | ||||
| engine, you must install the package ``mysql-connector-python``. | ||||
| 
 | ||||
| The authentication plugin is configurable by setting ``auth_plugin`` in the | ||||
| attributes.  By default it is set to ``caching_sha2_password``.  This is an | ||||
| example configuration for quering a MySQL server: | ||||
| 
 | ||||
| .. code:: yaml | ||||
| 
 | ||||
|    - name: my_database | ||||
|      engine: mysql_server | ||||
|      database: my_database | ||||
|      username: searx | ||||
|      password: password | ||||
|      limit: 5 | ||||
|      query_str: 'SELECT * from my_table WHERE my_column=%(query)s' | ||||
| 
 | ||||
| 
 | ||||
| Acknowledgement | ||||
| =============== | ||||
| 
 | ||||
| This development was sponsored by `Search and Discovery Fund | ||||
| <https://nlnet.nl/discovery>`_ of `NLnet Foundation <https://nlnet.nl/>`_ . | ||||
| 
 | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Markus Heiser
						Markus Heiser