mirror of
				https://github.com/searxng/searxng
				synced 2024-01-01 19:24:07 +01:00 
			
		
		
		
	[enh] add redis offline engine / https://redis.io/
Slightly modified merge of commit [97269be6], [01a8a5814a] and [c8d2b5eb] from searx. [97269be6] https://github.com/searx/searx/commit/97269be6 [01a8a581] https://github.com/searx/searx/commit/01a8a581 [c8d2b5eb] https://github.com/searx/searx/commit/c8d2b5eb Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
This commit is contained in:
		
							parent
							
								
									e33858d6ef
								
							
						
					
					
						commit
						e4b6558339
					
				
					 2 changed files with 84 additions and 0 deletions
				
			
		
							
								
								
									
										75
									
								
								searx/engines/redis_server.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								searx/engines/redis_server.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,75 @@ | |||
| # SPDX-License-Identifier: AGPL-3.0-or-later | ||||
| # lint: pylint | ||||
| # pylint: disable=missing-function-docstring | ||||
| """Redis engine (offline) | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
| import redis  # pylint: disable=import-error | ||||
| 
 | ||||
| engine_type = 'offline' | ||||
| 
 | ||||
| # redis connection variables | ||||
| host = '127.0.0.1' | ||||
| port = 6379 | ||||
| password = '' | ||||
| db = 0 | ||||
| 
 | ||||
| # engine specific variables | ||||
| paging = False | ||||
| result_template = 'key-value.html' | ||||
| exact_match_only = True | ||||
| 
 | ||||
| redis_client = None | ||||
| def init(_engine_settings): | ||||
|     # pylint: disable=global-statement | ||||
|     global redis_client | ||||
|     redis_client = redis.StrictRedis( | ||||
|         host = host, | ||||
|         port = port, | ||||
|         db = db, | ||||
|         password = password or None, | ||||
|         decode_responses = True, | ||||
|     ) | ||||
| 
 | ||||
| def search(query, _params): | ||||
| 
 | ||||
|     if not exact_match_only: | ||||
|         return search_keys(query) | ||||
| 
 | ||||
|     ret = redis_client.hgetall(query) | ||||
|     if ret: | ||||
|         ret['template'] = result_template | ||||
|         return [ret] | ||||
| 
 | ||||
|     if ' ' in query: | ||||
|         qset, rest = query.split(' ', 1) | ||||
|         ret = [] | ||||
|         for res in redis_client.hscan_iter( | ||||
|                 qset, match='*{}*'.format(rest) | ||||
|         ): | ||||
|             ret.append({ | ||||
|                 res[0]: res[1], | ||||
|                 'template': result_template, | ||||
|             }) | ||||
|         return ret | ||||
|     return [] | ||||
| 
 | ||||
| def search_keys(query): | ||||
|     ret = [] | ||||
|     for key in redis_client.scan_iter( | ||||
|             match='*{}*'.format(query) | ||||
|     ): | ||||
|         key_type = redis_client.type(key) | ||||
|         res = None | ||||
| 
 | ||||
|         if key_type == 'hash': | ||||
|             res = redis_client.hgetall(key) | ||||
|         elif key_type == 'list': | ||||
|             res = dict(enumerate(redis_client.lrange(key, 0, -1))) | ||||
| 
 | ||||
|         if res: | ||||
|             res['template'] = result_template | ||||
|             res['redis_key'] = key | ||||
|             ret.append(res) | ||||
|     return ret | ||||
|  | @ -960,6 +960,15 @@ engines: | |||
|     timeout : 10.0 | ||||
|     disabled : True | ||||
| 
 | ||||
|   # Required dependency: redis | ||||
|   #  - name: myredis | ||||
|   #    engine: redis_server | ||||
|   #    exact_match_only: False | ||||
|   #    host: '127.0.0.1' | ||||
|   #    port: 6379 | ||||
|   #    password: '' | ||||
|   #    db: 0 | ||||
| 
 | ||||
| # tmp suspended: bad certificate | ||||
| #  - name : scanr structures | ||||
| #    shortcut: scs | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Adam Tauber
						Adam Tauber