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 |     timeout : 10.0 | ||||||
|     disabled : True |     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 | # tmp suspended: bad certificate | ||||||
| #  - name : scanr structures | #  - name : scanr structures | ||||||
| #    shortcut: scs | #    shortcut: scs | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Adam Tauber
						Adam Tauber