Ë
    êU.j5’  ã                   ó–  — d dl Z d dlZd dlmZmZmZmZ d dlmZm	Z	 d dl
mZ ddlmZmZ ddlmZ dd	lmZmZmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0d Z1d!Z2d"Z3d#Z4d$Z5d%Z6d&Z7d'Z8d(Z9d)Z:d*Z;d+Z<d,Z=d-Z>d.Z?d/Z@d0ZAd1ZBd2ZCd3ZDd4ZEd5ZFd6ZGd7ZHd8ZId9ZJd:ZK G d;„ d<«      ZL G d=„ d>eL«      ZMy)?é    N)ÚDictÚListÚOptionalÚUnion)ÚNEVER_DECODEÚPipeline)Údeprecated_functioné   )Úget_protocol_versionÚparse_to_dicté   )Ú	to_string)ÚAggregateRequestÚAggregateResultÚCursor)ÚDocument)ÚField)ÚIndexDefinition)ÚQuery)ÚResult)ÚSuggestionParserÚNUMERICz	FT.CREATEzFT.ALTERz	FT.SEARCHzFT.ADDz
FT.ADDHASHzFT.DROPzFT.DROPINDEXz
FT.EXPLAINzFT.EXPLAINCLIzFT.DELzFT.AGGREGATEz
FT.PROFILEz	FT.CURSORzFT.SPELLCHECKz
FT.DICTADDz
FT.DICTDELzFT.DICTDUMPzFT.GETzFT.MGETz	FT.CONFIGz
FT.TAGVALSzFT.ALIASADDzFT.ALIASUPDATEzFT.ALIASDELzFT.INFOz	FT.SUGADDz	FT.SUGDELz	FT.SUGLENz	FT.SUGGETzFT.SYNUPDATEz
FT.SYNDUMPÚ	NOOFFSETSÚNOFIELDSÚNOHLÚNOFREQSÚMAXTEXTFIELDSÚ	TEMPORARYÚ	STOPWORDSÚSKIPINITIALSCANÚ
WITHSCORESÚFUZZYÚWITHPAYLOADSc                   ó  — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ ZdXd
„Z	 	 	 	 	 	 	 	 	 dYdee   dededeee      dee   dededefd„Zdee   fd„ZdZdefd„Z	 	 	 	 	 	 	 	 d[d„Z	 d\d„Z edd¬«      	 	 	 	 	 	 	 d]dededed ed!ed"ed#ee   d$edee   fd%„«       Z edd¬«      d^d&„«       Zd_d'„Zd(„ Zd)„ Zd*„ Zd+e e!ee ee"ee#f   f   df   fd,„Z$d+e e!ee ee"ee#f   f   df   fd-„Z%	 d`d.e ee&f   d+e e!ee ee"ee#f   f   df   fd/„Z'	 d`d.e ee&f   d+e!ee ee"ef   f   fd0„Z(d.e ee&f   fd1„Z)	 d`d.e ee&f   d+e!ee ee"ef   f   fd2„Z*d3ed.e ee&e+f   d4efd5„Z,	 	 dad.e ee&e+f   d6ed+ee!ee ee"ef   f      fd7„Z-dbd8„Z.d9ed:ee   fd;„Z/d9ed:ee   fd<„Z0d9efd=„Z1d>ed?ed@efdA„Z2d>ed@efdB„Z3dCefdD„Z4dEefdF„Z5dEefdG„Z6dEefdH„Z7dI„ Z8dJed@e"fdK„Z9dJedLed@e"fdM„Z:	 	 	 	 dcdJedNedOedPe"dQedRed@ee;   fdS„Z<dZdTedUed:ee   fdV„Z=dW„ Z>y)dÚSearchCommandszSearch commands.c                 ó`   — t        | j                  «      dv r|S  | j                  |   |fi |¤ŽS )N©Ú3é   )r   ÚclientÚ_RESP2_MODULE_CALLBACKS)ÚselfÚcmdÚresÚkwargss       ú`C:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\redis/commands/search/commands.pyÚ_parse_resultszSearchCommands._parse_resultsD   s5   € Ü §¡Ó,°Ñ8ØˆJà4�4×/Ñ/°Ñ4°SÑC¸FÑCÐCó    c                 óL   — t        t        |«      }t        t        ||«      «      S ©N)Úmapr   ÚdictÚzip)r,   r.   r/   Úits       r0   Ú_parse_infozSearchCommands._parse_infoJ   s   € Ü”˜CÓ ˆÜ”C˜˜B“KÓ Ð r2   c           	      ó”   — t        ||d   j                   |d   |d   j                  |d   j                  |d   j                  ¬«      S )NÚqueryÚduration)r<   Úhas_payloadÚwith_scoresÚfield_encodings)r   Ú_no_contentÚ_with_payloadsÚ_with_scoresÚ_return_fields_decode_as©r,   r.   r/   s      r0   Ú_parse_searchzSearchCommands._parse_searchN   sQ   € ÜØØ�w‘×+Ñ+Ð+Ø˜JÑ'Ø˜w™×6Ñ6Ø˜w™×4Ñ4Ø" 7™O×DÑDô
ð 	
r2   c                 ó4   — | j                  ||d   |d   «      S )Nr;   Ú
has_cursor)Ú_get_aggregate_resultrD   s      r0   Ú_parse_aggregatezSearchCommands._parse_aggregateX   s    € Ø×)Ñ)¨#¨v°g©ÀÀ|Ñ@TÓUÐUr2   c                 óø   — |d   }t        |t        «      r!| j                  |d   ||j                  «      }n5t	        |d   |j
                   |d   |j                  |j                  ¬«      }|t        |d   «      fS )Nr;   r   r<   )r<   r=   r>   r   )	Ú
isinstancer   rH   Ú_cursorr   r@   rA   rB   r   )r,   r.   r/   r;   Úresults        r0   Ú_parse_profilezSearchCommands._parse_profile[   s   € Ø�w‘ˆÜ�eÔ-Ô.Ø×/Ñ/°°A±¸¸u¿}¹}ÓM‰FäØ�A‘Ø×%Ñ%Ð%Ø 
Ñ+Ø!×0Ñ0Ø!×.Ñ.ôˆFð ”} S¨¡VÓ,Ð,Ð,r2   c                 óÜ   — i }|dk(  r|S |D ]X  }t        |t        «      r|dk(  rŒt        |«      dk7  rŒ(|d   sŒ.|d   d   sŒ7|d   D �cg c]  }|d   |d   dœ‘Œ c}||d   <   ŒZ |S c c}w )Nr   r)   r
   r   )ÚscoreÚ
suggestion)rK   ÚintÚlen)r,   r.   r/   ÚcorrectionsÚ_correctionÚ_items         r0   Ú_parse_spellcheckz SearchCommands._parse_spellcheckj   s    € ØˆØ�!Š8ØÐãˆKÜ˜+¤sÔ+°¸qÒ0@Øä�;Ó 1Ò$ØØ˜q’>ØØ˜q‘> !Ò$Øð$ JUÐUVÊó+ÙIWÀ˜% ™(°%¸±(Ó;Èñ+ˆK˜ A™Ò'ð5 ð< Ðùò	+s   Á
A)c                 óB   — |r|D �ci c]  }|d   |d   “Œ c}S i S c c}w )Nr   r   © )r,   r.   r/   Úkvss       r0   Ú_parse_config_getz SearchCommands._parse_config_get�   s-   € Ù25©#Ó.©# 3��A‘˜˜A™‘¨#Ñ.Ð=¸2Ð=ùÒ.s   ‡c                 óh   — t        dt        |«      d«      D �ci c]  }||   ||dz      “Œ c}S c c}w )Nr   r
   r   )ÚrangerS   )r,   r.   r/   Úis       r0   Ú_parse_syndumpzSearchCommands._parse_syndump’   s:   € Ü,1°!´S¸³X¸qÔ,AÓBÑ,A q��A‘˜˜A ™E™
Ñ"Ð,AÑBÐBùÒBs   ™/c                 ó(   — | j                  | |¬«      S )zT
        Create a new batch indexer from the client with a given chunk size
        )Ú
chunk_size)ÚBatchIndexer)r,   ra   s     r0   Úbatch_indexerzSearchCommands.batch_indexer•   s   € ð × Ñ  °*Ð Ó=Ð=r2   NÚfieldsÚno_term_offsetsÚno_field_flagsÚ	stopwordsÚ
definitionÚno_highlightÚno_term_frequenciesÚskip_initial_scanc                 ó6  — t         | j                  g}|�||j                  z  }|r|j                  t        «       |�6t        |t        «      r&|j                  t        «       |j                  |«       |r|j                  t        «       |r|j                  t        «       |r|j                  t        «       |	r|j                  t        «       |
r|j                  t        «       |�Kt        |t        t        t        f«      r0|t         t#        |«      gz  }t#        |«      dkD  r|t        |«      z  }|j                  d«       	 |t        t%        j&                  d„ |D «       Ž «      z  } | j,                  |Ž S # t(        $ r ||j+                  «       z  }Y Œ-w xY w)a«  
        Creates the search index. The index must not already exist.

        For more information, see https://redis.io/commands/ft.create/

        Args:
            fields: A list of Field objects.
            no_term_offsets: If `true`, term offsets will not be saved in the index.
            no_field_flags: If true, field flags that allow searching in specific fields
                            will not be saved.
            stopwords: If provided, the index will be created with this custom stopword
                       list. The list can be empty.
            definition: If provided, the index will be created with this custom index
                        definition.
            max_text_fields: If true, indexes will be encoded as if there were more than
                             32 text fields, allowing for additional fields beyond 32.
            temporary: Creates a lightweight temporary index which will expire after the
                       specified period of inactivity. The internal idle timer is reset
                       whenever the index is searched or added to.
            no_highlight: If true, disables highlighting support. Also implied by
                          `no_term_offsets`.
            no_term_frequencies: If true, term frequencies will not be saved in the
                                 index.
            skip_initial_scan: If true, the initial scan and indexing will be skipped.

        r   ÚSCHEMAc              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr4   ©Ú
redis_args©Ú.0Úfs     r0   Ú	<genexpr>z.SearchCommands.create_index.<locals>.<genexpr>Û   ó   è ø€ Ð*JÁ6¸a¨1¯<©<¯>Á6ùó   ‚)Ú
CREATE_CMDÚ
index_nameÚargsÚappendr   rK   rR   r   r   r   r   r   r    ÚlistÚtupleÚsetr   rS   Ú	itertoolsÚchainÚ	TypeErrorrp   Úexecute_command)r,   rd   re   rf   rg   rh   Úmax_text_fieldsÚ	temporaryri   rj   rk   ry   s               r0   Úcreate_indexzSearchCommands.create_index›   sS  € ôN ˜DŸO™OÐ,ˆØÐ!Ø�J—O‘OÑ#ˆDÙØ�K‰KœÔ&ØÐ ¤Z°	¼3Ô%?Ø�K‰Kœ	Ô"Ø�K‰K˜	Ô"ÙØ�K‰Kœ	Ô"ÙØ�K‰KœÔÙØ�K‰KœÔ!ÙØ�K‰KœÔ ÙØ�K‰KœÔ(ØÐ ¤Z°	¼DÄ%ÌÐ;MÔ%NØ”Y¤ I£Ð/Ñ/ˆDÜ�9‹~ Ò!Øœ˜Y›Ñ'�à�‰�HÔð	(Ø”DœŸ™Ñ*JÁ6Ó*JÐKÓLÑLˆDð $ˆt×#Ñ# TÐ*Ð*øô ò 	(Ø�F×%Ñ%Ó'Ñ'ŠDð	(ús   Å%E9 Å9FÆFc                 óØ   — t         | j                  ddg}	 |t        t        j                  d„ |D «       Ž «      z  } | j                  |Ž S # t
        $ r ||j                  «       z  }Y Œ-w xY w)a  
        Alter the existing search index by adding new fields. The index
        must already exist.

        ### Parameters:

        - **fields**: a list of Field objects to add for the index

        For more information see `FT.ALTER <https://redis.io/commands/ft.alter>`_.
        rm   ÚADDc              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr4   ro   rq   s     r0   rt   z2SearchCommands.alter_schema_add.<locals>.<genexpr>ï   ru   rv   )Ú	ALTER_CMDrx   r{   r~   r   r€   rp   r�   )r,   rd   ry   s      r0   Úalter_schema_addzSearchCommands.alter_schema_addá   sr   € ô ˜4Ÿ?™?¨H°eÐ<ˆð	(Ø”DœŸ™Ñ*JÁ6Ó*JÐKÓLÑLˆDð $ˆt×#Ñ# TÐ*Ð*øô ò 	(Ø�F×%Ñ%Ó'Ñ'ŠDð	(ús   –%A
 Á
A)Á(A)Údelete_documentsc                 óP   — |rdnd}| j                  t        | j                  |«      S )ai  
        Drop the index if it exists.
        Replaced `drop_index` in RediSearch 2.0.
        Default behavior was changed to not delete the indexed documents.

        ### Parameters:

        - **delete_documents**: If `True`, all documents will be deleted.

        For more information see `FT.DROPINDEX <https://redis.io/commands/ft.dropindex>`_.
        ÚDDÚ )r�   ÚDROPINDEX_CMDrx   )r,   rŠ   Ú
delete_strs      r0   Ú	dropindexzSearchCommands.dropindexõ   s&   € ñ .‘T°2ˆ
Ø×#Ñ#¤M°4·?±?ÀJÓOÐOr2   c
                 óâ  — |s|	rd}t         | j                  ||g}|r|j                  d«       |�"|j                  d«       |j                  |«       |r7|j                  d«       |r|j                  d«       |	r|j                  d«       |r|d|gz  }|j                  d«       |t        t	        j
                  |
j                  «       Ž «      z  }|� |j                  |Ž S  | j                  |Ž S )	zS
        Internal add_document used for both batch and single doc indexing
        TÚNOSAVEÚPAYLOADÚREPLACEÚPARTIALÚNOCREATEÚLANGUAGEÚFIELDS)ÚADD_CMDrx   rz   r{   r~   r   Úitemsr�   )r,   Údoc_idÚconnÚnosaverP   ÚpayloadÚreplaceÚpartialÚlanguageÚ	no_createrd   ry   s               r0   Ú_add_documentzSearchCommands._add_document  sâ   € ñ" ‘iØˆGä˜Ÿ™¨&°%Ð8ˆÙØ�K‰K˜Ô!ØÐØ�K‰K˜	Ô"Ø�K‰K˜Ô ÙØ�K‰K˜	Ô"ÙØ—‘˜IÔ&ÙØ—‘˜JÔ'ÙØ�Z Ð*Ñ*ˆDØ�‰�HÔØ””Y—_‘_ f§l¡l£nÐ5Ó6Ñ6ˆàÐØ'�4×'Ñ'¨Ð.Ð.à#ˆt×#Ñ# TÐ*Ð*r2   c                 ó¢   — t         | j                  ||g}|r|j                  d«       |r|d|gz  }|� |j                  |Ž S  | j                  |Ž S )zX
        Internal add_document_hash used for both batch and single doc indexing
        r”   r—   )ÚADDHASH_CMDrx   rz   r�   )r,   r›   rœ   rP   r¡   rŸ   ry   s          r0   Ú_add_document_hashz!SearchCommands._add_document_hash.  sc   € ô ˜TŸ_™_¨f°eÐ<ˆáØ�K‰K˜	Ô"áØ�Z Ð*Ñ*ˆDàÐØ'�4×'Ñ'¨Ð.Ð.à#ˆt×#Ñ# TÐ*Ð*r2   z2.0.0z2deprecated since redisearch 2.0, call hset instead)ÚversionÚreasonr›   r�   rP   rž   rŸ   r    r¡   r¢   c	                 ó:   —  | j                   |fd|||||||dœ|	¤ŽS )aš  
        Add a single document to the index.

        Args:

            doc_id: the id of the saved document.
            nosave: if set to true, we just index the document, and don't
                      save a copy of it. This means that searches will just
                      return ids.
            score: the document ranking, between 0.0 and 1.0
            payload: optional inner-index payload we can save for fast
                     access in scoring functions
            replace: if True, and the document already is in the index,
                     we perform an update and reindex the document
            partial: if True, the fields specified will be added to the
                       existing document.
                       This has the added benefit that any fields specified
                       with `no_index`
                       will not be reindexed again. Implies `replace`
            language: Specify the language used for document tokenization.
            no_create: if True, the document is only updated and reindexed
                         if it already exists.
                         If the document does not exist, an error will be
                         returned. Implies `replace`
            fields: kwargs dictionary of the document fields to be saved
                    and/or indexed.
                    NOTE: Geo points shoule be encoded as strings of "lon,lat"
        N)rœ   r�   rP   rž   rŸ   r    r¡   r¢   )r£   )
r,   r›   r�   rP   rž   rŸ   r    r¡   r¢   rd   s
             r0   Úadd_documentzSearchCommands.add_documentB  sD   € ðV "ˆt×!Ñ!Øð
àØØØØØØØñ
ð ñ
ð 	
r2   c                 ó.   — | j                  |d|||¬«      S )aþ  
        Add a hash document to the index.

        ### Parameters

        - **doc_id**: the document's id. This has to be an existing HASH key
                      in Redis that will hold the fields the index needs.
        - **score**:  the document ranking, between 0.0 and 1.0
        - **replace**: if True, and the document already is in the index, we
                      perform an update and reindex the document
        - **language**: Specify the language used for document tokenization.
        N)rœ   rP   r¡   rŸ   )r¦   )r,   r›   rP   r¡   rŸ   s        r0   Úadd_document_hashz SearchCommands.add_document_hashz  s'   € ð  ×&Ñ&Ø˜ U°XÀwð 'ó 
ð 	
r2   c                 óŽ   — t         | j                  |g}|r|j                  d«       |� |j                  |Ž S  | j                  |Ž S )a  
        Delete a document from index
        Returns 1 if the document was deleted, 0 if not

        ### Parameters

        - **delete_actual_document**: if set to True, RediSearch also delete
                                      the actual document if it is in the index
        rŒ   )ÚDEL_CMDrx   rz   r�   )r,   r›   rœ   Údelete_actual_documentry   s        r0   Údelete_documentzSearchCommands.delete_documentŽ  sO   € ô ˜Ÿ™¨&Ð1ˆÙ!Ø�K‰K˜ÔàÐØ'�4×'Ñ'¨Ð.Ð.à#ˆt×#Ñ# TÐ*Ð*r2   c                 óò   — | j                   j                  |«      }|j                  «       D ��ci c]  \  }}t        |«      t        |«      “Œ }}}|}	 |d= t        dd|i|¤ŽS c c}}w # t        $ r Y Œw xY w)ú.
        Load a single document by id
        ÚidrY   ©r*   Úhgetallrš   r   ÚKeyErrorr   ©r,   r³   rd   ÚkÚvÚf2s         r0   Úload_documentzSearchCommands.load_document¡  sƒ   € ð —‘×$Ñ$ RÓ(ˆØ5;·\±\´^ÔD±^©T¨Q°Œi˜‹lœI a›LÑ(°^ˆÑDØˆð	Ø�t�ô Ñ(˜2Ð( Ñ(Ð(ùó Eøô
 ò 	Ùð	ús   ¯A$ÁA* Á*	A6Á5A6c                 óF   —  | j                   t        | j                  g|¢­Ž S )z�
        Returns the full contents of multiple documents.

        ### Parameters

        - **ids**: the ids of the saved documents.

        )r�   ÚMGET_CMDrx   )r,   Úidss     r0   ÚgetzSearchCommands.get°  s"   € ð $ˆt×#Ñ#¤H¨d¯o©oÐDÀÒDÐDr2   c                 ón   — | j                  t        | j                  «      }| j                  t        |«      S )úÕ
        Get info an stats about the the current index, including the number of
        documents, memory consumption, etc

        For more information see `FT.INFO <https://redis.io/commands/ft.info>`_.
        ©r�   ÚINFO_CMDrx   r1   ©r,   r.   s     r0   ÚinfozSearchCommands.info¼  s-   € ð ×"Ñ"¤8¨T¯_©_Ó=ˆØ×"Ñ"¤8¨SÓ1Ð1r2   Úquery_paramsc                 óþ   — |€g S g }t        |«      dkD  rh|j                  d«       |j                  t        |«      dz  «       |j                  «       D ]'  \  }}|j                  |«       |j                  |«       Œ) |S )Nr   Úparamsr
   )rS   rz   rš   )r,   rÆ   ry   ÚkeyÚvalues        r0   Úget_params_argszSearchCommands.get_params_argsÇ  sy   € ð ÐØˆIØˆÜˆ|Ó˜qÒ Ø�K‰K˜Ô!Ø�K‰Kœ˜LÓ)¨AÑ-Ô.Ø*×0Ñ0Ö2‘
��UØ—‘˜CÔ Ø—‘˜EÕ"ð 3ð ˆr2   c                 óö   — | j                   g}t        |t        «      rt        |«      }t        |t        «      st	        dt        |«      › �«      ‚||j                  «       z  }|| j                  |«      z  }||fS )NzBad query type )rx   rK   Ústrr   Ú
ValueErrorÚtypeÚget_argsrË   )r,   r;   rÆ   ry   s       r0   Ú_mk_query_argszSearchCommands._mk_query_argsÕ  ss   € ð —‘Ð ˆä�eœSÔ!ä˜%“LˆEÜ˜%¤Ô'Ü˜¬t°E«{¨mÐ<Ó=Ð=à�—‘Ó Ñ ˆØ�×$Ñ$ \Ó2Ñ2ˆà�Uˆ{Ðr2   r;   c                 óT  — | j                  ||¬«      \  }}t        j                  «       }i }t        | j                  «      dvr	d|t        <    | j
                  t        g|¢­i |¤Ž}t        |t        «      r|S | j                  t        ||t        j                  «       |z
  dz  ¬«      S )á¦  
        Search the index for a given query, and return a result of documents

        ### Parameters

        - **query**: the search query. Either a text for simple queries with
                     default parameters, or a Query object for complex queries.
                     See RediSearch's documentation on query format

        For more information see `FT.SEARCH <https://redis.io/commands/ft.search>`_.
        ©rÆ   r'   Tç     @�@©r;   r<   ©
rÑ   Útimer   r*   r   r�   Ú
SEARCH_CMDrK   r   r1   ©r,   r;   rÆ   ry   ÚstÚoptionsr.   s          r0   ÚsearchzSearchCommands.searchå  s¤   € ð  ×)Ñ)¨%¸lÐ)ÓK‰ˆˆeÜ�Y‰Y‹[ˆàˆÜ §¡Ó,°HÑ<Ø$(ˆG”LÑ!à"ˆd×"Ñ"¤:Ð@°Ò@¸Ñ@ˆä�cœ8Ô$ØˆJà×"Ñ"Ü˜ 5´D·I±I³KÀ"Ñ4DÈÑ3Nð #ó 
ð 	
r2   c                 ó\   — | j                  ||¬«      \  }} | j                  t        g|¢­Ž S )z�Returns the execution plan for a complex query.

        For more information see `FT.EXPLAIN <https://redis.io/commands/ft.explain>`_.
        rÔ   )rÑ   r�   ÚEXPLAIN_CMD)r,   r;   rÆ   ry   Ú
query_texts        r0   ÚexplainzSearchCommands.explain  s6   € ð  ×.Ñ.¨uÀ<Ð.ÓPÑˆˆjØ#ˆt×#Ñ#¤KÐ7°$Ò7Ð7r2   c                 ó   — t        d«      ‚)Nz#EXPLAINCLI will not be implemented.)ÚNotImplementedError)r,   r;   s     r0   Úexplain_clizSearchCommands.explain_cli  s   € Ü!Ð"GÓHÐHr2   c                 ó’  — t        |t        «      r9t        |j                  «      }t        | j
                  g|j                  «       z   }nCt        |t        «      r'd}t        d| j
                  g|j                  «       z   }nt        d|«      ‚|| j                  |«      z  } | j                  |Ž }| j                  t        |||¬«      S )á‰  
        Issue an aggregation query.

        ### Parameters

        **query**: This can be either an `AggregateRequest`, or a `Cursor`

        An `AggregateResult` object is returned. You can access the rows from
        its `rows` property, which will always yield the rows of the result.

        For more information see `FT.AGGREGATE <https://redis.io/commands/ft.aggregate>`_.
        TÚREADú	Bad query©r;   rG   ©rK   r   ÚboolrL   ÚAGGREGATE_CMDrx   Ú
build_argsr   Ú
CURSOR_CMDrÎ   rË   r�   r1   ©r,   r;   rÆ   rG   r-   Úraws         r0   Ú	aggregatezSearchCommands.aggregate  s»   € ô" �eÔ-Ô.Ü˜eŸm™mÓ,ˆJÜ  $§/¡/Ð2°U×5EÑ5EÓ5GÑG‰CÜ˜œvÔ&ØˆJÜ˜v t§¡Ð7¸%×:JÑ:JÓ:LÑL‰Cä˜[¨%Ó0Ð0Øˆt×#Ñ# LÓ1Ñ1ˆà"ˆd×"Ñ" CÐ(ˆØ×"Ñ"Ü˜3 e¸
ð #ó 
ð 	
r2   rð   rG   c                 óâ   — |r1t        |t        «      r|d   |_        |}nt        |d   «      }|d   }nd }t        |t        «      r|j                  r|d   }|dd  }nd }|dd  }t        |||«      S )Nr   r   r
   )rK   r   Úcidr   Ú_with_schemar   )r,   rð   r;   rG   ÚcursorÚschemaÚrowss          r0   rH   z$SearchCommands._get_aggregate_result4  s‚   € ñ Ü˜%¤Ô(Ø ™F�”	Ø‘ä  A¡›�Ø�a‘&‰CàˆFä�eÔ-Ô.°5×3EÒ3EØ˜‘VˆFØ�q�r�7‰DàˆFØ�q�r�7ˆDä˜t V¨VÓ4Ð4r2   Úlimitedc                 óú  — t        j                   «       }t        | j                  dg}|r|j                  d«       |j                  d«       t	        |t
        «      rd|d<   ||j                  «       z  }nHt	        |t        «      r-d|d<   ||j                  «       z  }|| j                  |«      z  }nt        d«      ‚ | j                  |Ž }| j                  t        ||t        j                   «       |z
  dz  ¬	«      S )
a‡  
        Performs a search or aggregate command and collects performance
        information.

        ### Parameters

        **query**: This can be either an `AggregateRequest`, `Query` or string.
        **limited**: If set to True, removes details of reader iterator.
        **query_params**: Define one or more value parameters.
        Each parameter has a name and a value.

        r�   ÚLIMITEDÚQUERYÚ	AGGREGATEr
   ÚSEARCHz5Must provide AggregateRequest object or Query object.rÕ   rÖ   )rØ   ÚPROFILE_CMDrx   rz   rK   r   rí   r   rÐ   rË   rÎ   r�   r1   )r,   r;   rø   rÆ   rÛ   r-   r.   s          r0   ÚprofilezSearchCommands.profileJ  sé   € ô$ �Y‰Y‹[ˆÜ˜DŸO™O¨RÐ0ˆÙØ�J‰J�yÔ!Ø�
‰
�7Ôä�eÔ-Ô.Ø ˆC�‰FØ�5×#Ñ#Ó%Ñ%‰CÜ˜œuÔ%ØˆC�‰FØ�5—>‘>Ó#Ñ#ˆCØ�4×'Ñ'¨Ó5Ñ5‰CäÐTÓUÐUà"ˆd×"Ñ" CÐ(ˆà×"Ñ"Ü˜ E´T·Y±Y³[À2Ñ5EÈÑ4Oð #ó 
ð 	
r2   c                 óô   — t         | j                  |g}|r|j                  d|g«       |r|j                  dd|g«       |r|j                  dd|g«        | j                  |Ž }| j	                  t         |«      S )a´  
        Issue a spellcheck query

        Args:

            query: search query.
            distance: the maximal Levenshtein distance for spelling
                       suggestions (default: 1, max: 4).
            include: specifies an inclusion custom dictionary.
            exclude: specifies an exclusion custom dictionary.

        For more information see `FT.SPELLCHECK <https://redis.io/commands/ft.spellcheck>`_.
        ÚDISTANCEÚTERMSÚINCLUDEÚEXCLUDE©ÚSPELLCHECK_CMDrx   Úextendr�   r1   ©r,   r;   ÚdistanceÚincludeÚexcluder-   r.   s          r0   Ú
spellcheckzSearchCommands.spellcheckr  sy   € ô ˜tŸ™°Ð6ˆÙØ�J‰J˜
 HÐ-Ô.áØ�J‰J˜ ¨GÐ4Ô5áØ�J‰J˜ ¨GÐ4Ô5à"ˆd×"Ñ" CÐ(ˆà×"Ñ"¤>°3Ó7Ð7r2   ÚnameÚtermsc                 óR   — t         |g}|j                  |«        | j                  |Ž S )zûAdds terms to a dictionary.

        ### Parameters

        - **name**: Dictionary name.
        - **terms**: List of items for adding to the dictionary.

        For more information see `FT.DICTADD <https://redis.io/commands/ft.dictadd>`_.
        )ÚDICT_ADD_CMDr  r�   ©r,   r  r  r-   s       r0   Údict_addzSearchCommands.dict_addŽ  ó-   € ô ˜TÐ"ˆØ�
‰
�5ÔØ#ˆt×#Ñ# SÐ)Ð)r2   c                 óR   — t         |g}|j                  |«        | j                  |Ž S )a  Deletes terms from a dictionary.

        ### Parameters

        - **name**: Dictionary name.
        - **terms**: List of items for removing from the dictionary.

        For more information see `FT.DICTDEL <https://redis.io/commands/ft.dictdel>`_.
        )ÚDICT_DEL_CMDr  r�   r  s       r0   Údict_delzSearchCommands.dict_delœ  r  r2   c                 ó0   — t         |g} | j                  |Ž S )zÉDumps all terms in the given dictionary.

        ### Parameters

        - **name**: Dictionary name.

        For more information see `FT.DICTDUMP <https://redis.io/commands/ft.dictdump>`_.
        )ÚDICT_DUMP_CMDr�   )r,   r  r-   s      r0   Ú	dict_dumpzSearchCommands.dict_dumpª  s!   € ô ˜dÐ#ˆØ#ˆt×#Ñ# SÐ)Ð)r2   ÚoptionrÊ   Úreturnc                 ó>   — t         d||g} | j                  |Ž }|dk(  S )á  Set runtime configuration option.

        ### Parameters

        - **option**: the name of the configuration option.
        - **value**: a value for the configuration option.

        For more information see `FT.CONFIG SET <https://redis.io/commands/ft.config-set>`_.
        ÚSETÚOK©Ú
CONFIG_CMDr�   ©r,   r  rÊ   r-   rð   s        r0   Ú
config_setzSearchCommands.config_set¶  s.   € ô ˜5 &¨%Ð0ˆØ"ˆd×"Ñ" CÐ(ˆØ�d‰{Ðr2   c                 ó^   — t         d|g} | j                  |Ž }| j                  t         |«      S )úãGet runtime configuration option value.

        ### Parameters

        - **option**: the name of the configuration option.

        For more information see `FT.CONFIG GET <https://redis.io/commands/ft.config-get>`_.
        ÚGET©r!  r�   r1   ©r,   r  r-   r.   s       r0   Ú
config_getzSearchCommands.config_getÄ  s5   € ô ˜5 &Ð)ˆØ"ˆd×"Ñ" CÐ(ˆØ×"Ñ"¤:¨sÓ3Ð3r2   Útagfieldc                 óD   — | j                  t        | j                  |«      S )zÒ
        Return a list of all possible tag values

        ### Parameters

        - **tagfield**: Tag field name

        For more information see `FT.TAGVALS <https://redis.io/commands/ft.tagvals>`_.
        )r�   ÚTAGVALS_CMDrx   )r,   r*  s     r0   ÚtagvalszSearchCommands.tagvalsÑ  s   € ð ×#Ñ#¤K°·±À(ÓKÐKr2   Úaliasc                 óD   — | j                  t        || j                  «      S )zî
        Alias a search index - will fail if alias already exists

        ### Parameters

        - **alias**: Name of the alias to create

        For more information see `FT.ALIASADD <https://redis.io/commands/ft.aliasadd>`_.
        )r�   ÚALIAS_ADD_CMDrx   ©r,   r.  s     r0   ÚaliasaddzSearchCommands.aliasaddÞ  s   € ð ×#Ñ#¤M°5¸$¿/¹/ÓJÐJr2   c                 óD   — | j                  t        || j                  «      S )zø
        Updates an alias - will fail if alias does not already exist

        ### Parameters

        - **alias**: Name of the alias to create

        For more information see `FT.ALIASUPDATE <https://redis.io/commands/ft.aliasupdate>`_.
        )r�   ÚALIAS_UPDATE_CMDrx   r1  s     r0   ÚaliasupdatezSearchCommands.aliasupdateë  s   € ð ×#Ñ#Ô$4°e¸T¿_¹_ÓMÐMr2   c                 ó.   — | j                  t        |«      S )zØ
        Removes an alias to a search index

        ### Parameters

        - **alias**: Name of the alias to delete

        For more information see `FT.ALIASDEL <https://redis.io/commands/ft.aliasdel>`_.
        )r�   ÚALIAS_DEL_CMDr1  s     r0   ÚaliasdelzSearchCommands.aliasdelø  s   € ð ×#Ñ#¤M°5Ó9Ð9r2   c                 óh  — | j                  d¬«      }|D ]‰  }t        ||j                  |j                  g}|j	                  d«      r|j                  d«       |j                  r,|j                  d«       |j                  |j                  «        |j                  |Ž  Œ‹ |j                  «       d   S )aJ  
        Add suggestion terms to the AutoCompleter engine. Each suggestion has
        a score and string.
        If kwargs["increment"] is true and the terms are already in the
        server's dictionary, we increment their scores.

        For more information see `FT.SUGADD <https://redis.io/commands/ft.sugadd/>`_.
        F©ÚtransactionÚ	incrementÚINCRr“   éÿÿÿÿ©	ÚpipelineÚSUGADD_COMMANDÚstringrP   r¿   rz   rž   r�   Úexecute©r,   rÉ   Úsuggestionsr/   ÚpipeÚsugry   s          r0   ÚsugaddzSearchCommands.sugadd  s’   € ð �}‰}¨ˆ}Ó/ˆÛˆCÜ" C¨¯©°S·Y±YÐ?ˆDØ�z‰z˜+Ô&Ø—‘˜FÔ#Ø�{Š{Ø—‘˜IÔ&Ø—‘˜CŸK™KÔ(à ˆD× Ñ  $Ò'ð ð �|‰|‹~˜bÑ!Ð!r2   rÉ   c                 ó.   — | j                  t        |«      S )z 
        Return the number of entries in the AutoCompleter index.

        For more information see `FT.SUGLEN <https://redis.io/commands/ft.suglen>`_.
        )r�   ÚSUGLEN_COMMAND)r,   rÉ   s     r0   ÚsuglenzSearchCommands.suglen  s   € ð ×#Ñ#¤N°CÓ8Ð8r2   rB  c                 ó0   — | j                  t        ||«      S )zÙ
        Delete a string from the AutoCompleter index.
        Returns 1 if the string was found and deleted, 0 otherwise.

        For more information see `FT.SUGDEL <https://redis.io/commands/ft.sugdel>`_.
        )r�   ÚSUGDEL_COMMAND)r,   rÉ   rB  s      r0   ÚsugdelzSearchCommands.sugdel#  s   € ð ×#Ñ#¤N°C¸Ó@Ð@r2   ÚprefixÚfuzzyÚnumr>   Úwith_payloadsc                 ó  — t         ||d|g}|r|j                  t        «       |r|j                  t        «       |r|j                  t        «        | j
                  |Ž }g }	|s|	S t        |||«      }
|
D �cg c]  }|‘Œ c}S c c}w )át  
        Get a list of suggestions from the AutoCompleter, for a given prefix.

        Parameters:

        prefix : str
            The prefix we are searching. **Must be valid ascii or utf-8**
        fuzzy : bool
            If set to true, the prefix search is done in fuzzy mode.
            **NOTE**: Running fuzzy searches on short (<3 letters) prefixes
            can be very
            slow, and even scan the entire index.
        with_scores : bool
            If set to true, we also return the (refactored) score of
            each suggestion.
            This is normally not needed, and is NOT the original score
            inserted into the index.
        with_payloads : bool
            Return suggestion payloads
        num : int
            The maximum number of results we return. Note that we might
            return less. The algorithm trims irrelevant suggestions.

        Returns:

        list:
             A list of Suggestion objects. If with_scores was False, the
             score of all suggestions is 1.

        For more information see `FT.SUGGET <https://redis.io/commands/ft.sugget>`_.
        ÚMAX©ÚSUGGET_COMMANDrz   r"   r!   r#   r�   r   )r,   rÉ   rO  rP  rQ  r>   rR  ry   r.   ÚresultsÚparserÚss               r0   ÚsuggetzSearchCommands.sugget,  s‡   € ôP   V¨U°CÐ8ˆÙØ�K‰KœÔÙØ�K‰Kœ
Ô#ÙØ�K‰KœÔ%à"ˆd×"Ñ" DÐ)ˆØˆÙØˆNä! +¨}¸cÓBˆÙ!Ó"™6�a’˜6Ñ"Ð"ùÒ"s   Á7	BÚgroupidÚskipinitialc                 ó�   — t         | j                  |g}|r|j                  dg«       |j                  |«        | j                  |Ž S )að  
        Updates a synonym group.
        The command is used to create or update a synonym group with
        additional terms.
        Only documents which were indexed after the update will be affected.

        Parameters:

        groupid :
            Synonym group id.
        skipinitial : bool
            If set to true, we do not scan and index.
        terms :
            The terms.

        For more information see `FT.SYNUPDATE <https://redis.io/commands/ft.synupdate>`_.
        r    )ÚSYNUPDATE_CMDrx   r  r�   )r,   r\  r]  r  r-   s        r0   Ú	synupdatezSearchCommands.synupdated  sF   € ô$ ˜dŸo™o¨wÐ7ˆÙØ�J‰JÐ)Ð*Ô+Ø�
‰
�5ÔØ#ˆt×#Ñ# SÐ)Ð)r2   c                 ón   — | j                  t        | j                  «      }| j                  t        |«      S )a  
        Dumps the contents of a synonym group.

        The command is used to dump the synonyms data structure.
        Returns a list of synonym terms and their synonym group ids.

        For more information see `FT.SYNDUMP <https://redis.io/commands/ft.syndump>`_.
        )r�   ÚSYNDUMP_CMDrx   r1   rÄ   s     r0   ÚsyndumpzSearchCommands.syndump|  s-   € ð ×"Ñ"¤;°·±Ó@ˆØ×"Ñ"¤;°Ó4Ð4r2   )éd   )	FFNNFNFFF)F)NFç      ð?NFFNF)Nre  NF)Fre  NFFNF)re  NF)NFr4   )FN©NNN©Fé
   FF)?Ú__name__Ú
__module__Ú__qualname__Ú__doc__r1   r9   rE   rI   rN   rW   r[   r_   rc   r   r   rë   r   rÍ   r   r„   r‰   r�   r£   r¦   r	   Úfloatrª   r¬   r°   r»   r¿   rÅ   r   r   rR   ÚbytesrË   rÑ   r   rÝ   rá   rä   rñ   r   rH   rÿ   r  r  r  r  r#  r)  r-  r2  r5  r8  rH  rK  rN  r   r[  r`  rc  rY   r2   r0   r%   r%   A   sà  „ ÙòDò!ò
òVò-ò#òJ>òCó>ð !&Ø$Ø)-Ø04ØØØ"Ø$)Ø"'ñD+à�U‘ðD+ð ðD+ð ð	D+ð
 ˜D ™IÑ&ðD+ð ˜_Ñ-ðD+ð ðD+ð "ðD+ð  óD+ðL+ t¨C¡yó +ñ(P¨$ó Pð$ ØØØØØØØó(+ðV DIó+ñ( ØÐ Tôð ØØØØØ"&Øñ3
àð3
ð ð3
ð ð	3
ð
 ð3
ð ð3
ð ð3
ð ˜3‘-ð3
ð ð3
ð �s‘)ò3
óð3
ñj ØÐ Tôò
óð
ó"+ò&)ò
Eò	2ðØ! $ s¨E°#°s¸EÀ5Ð2HÑ,IÐ'IÑ"JÈDÐ"PÑQóðØ#(¨¨c°5¸¸cÀ5È%Ð9OÑ3PÐ.PÑ)QÐSWÐ)WÑ#Xóð& OSñ
à�S˜%�ZÑ ð
ð ˜D  e¨C°°e¸UÐ,BÑ&CÐ!CÑDÀdÐJÑKó
ðF ;?ñ
8à�S˜%�ZÑ ð
8ð ˜3  c¨3° oÑ 6Ð6Ñ7ó
8ðI  s¨E zÑ!2ó Ið ;?ñ
à�S˜%�ZÑ ð
ð ˜3  c¨3° oÑ 6Ð6Ñ7ó
ð@5Øð5Ø % c¨5Ð2BÐ&BÑ Cð5ØQUó5ð2 ØDHñ	&
à�S˜%Ð!1Ð1Ñ2ð&
ð ð&
ð ˜t C¨¨s°C¸¨Ñ)?Ð$?Ñ@ÑAó	&
óP8ð8*˜Sð *¨$¨s©)ó *ð*˜Sð *¨$¨s©)ó *ð
*˜có 
*ð ð ¨Sð °Tó ð4 ð 4¨ó 4ðL ó LðK˜có KðN ó Nð
:˜có 
:ò"ð.9˜#ð 9 #ó 9ðA˜#ð A sð A¨só Að ØØ!Ø#ñ6#àð6#ð ð6#ð ð	6#ð
 ð6#ð ð6#ð ð6#ð 
ÐÑ	ó6#ñp* ð *°4ð *ÈÈcÉó *ó0
5r2   r%   c                   óæ   — e Zd Zd„ Z	 ddeeef   deeeeee	f   f   fd„Z
	 ddeeef   deeeeee	f   f   fd„Zdd„Zded	ed
efd„Zded
efd„Zd„ Zd„ Z	 	 	 	 ddedededededed
ee   fd„Zy)ÚAsyncSearchCommandsc              ƒ   óŠ   K  — | j                  t        | j                  «      ƒ d{  –—† }| j                  t        |«      S 7 Œ­w)rÁ   NrÂ   rÄ   s     r0   rÅ   zAsyncSearchCommands.infoŠ  s:   è ø€ ð ×(Ñ(¬°4·?±?ÓC×CˆØ×"Ñ"¤8¨SÓ1Ð1ð Dús   ‚$A¦A§ANr;   rÆ   c              ƒ   óp  K  — | j                  ||¬«      \  }}t        j                  «       }i }t        | j                  «      dvr	d|t        <    | j
                  t        g|¢­i |¤Žƒ d{  –—† }t        |t        «      r|S | j                  t        ||t        j                  «       |z
  dz  ¬«      S 7 ŒG­w)rÓ   rÔ   r'   TNrÕ   rÖ   r×   rÚ   s          r0   rÝ   zAsyncSearchCommands.search•  s±   è ø€ ð  ×)Ñ)¨%¸lÐ)ÓK‰ˆˆeÜ�Y‰Y‹[ˆàˆÜ §¡Ó,°HÑ<Ø$(ˆG”LÑ!à(�D×(Ñ(¬ÐF°dÒF¸gÑF×Fˆä�cœ8Ô$ØˆJà×"Ñ"Ü˜ 5´D·I±I³KÀ"Ñ4DÈÑ3Nð #ó 
ð 	
ð Gús   ‚A*B6Á,B4Á-AB6c              ƒ   ó®  K  — t        |t        «      r9t        |j                  «      }t        | j
                  g|j                  «       z   }nCt        |t        «      r'd}t        d| j
                  g|j                  «       z   }nt        d|«      ‚|| j                  |«      z  } | j                  |Ž ƒ d{  –—† }| j                  t        |||¬«      S 7 Œ­w)ræ   Trç   rè   Nré   rê   rï   s         r0   rñ   zAsyncSearchCommands.aggregateµ  sÇ   è ø€ ô" �eÔ-Ô.Ü˜eŸm™mÓ,ˆJÜ  $§/¡/Ð2°U×5EÑ5EÓ5GÑG‰CÜ˜œvÔ&ØˆJÜ˜v t§¡Ð7¸%×:JÑ:JÓ:LÑL‰Cä˜[¨%Ó0Ð0Øˆt×#Ñ# LÓ1Ñ1ˆà(�D×(Ñ(¨#Ð.×.ˆØ×"Ñ"Ü˜3 e¸
ð #ó 
ð 	
ð /ús   ‚B3CÂ5CÂ6Cc              ƒ   ó  K  — t         | j                  |g}|r|j                  d|g«       |r|j                  dd|g«       |r|j                  dd|g«        | j                  |Ž ƒ d{  –—† }| j	                  t         |«      S 7 Œ­w)a¾  
        Issue a spellcheck query

        ### Parameters

        **query**: search query.
        **distance***: the maximal Levenshtein distance for spelling
                       suggestions (default: 1, max: 4).
        **include**: specifies an inclusion custom dictionary.
        **exclude**: specifies an exclusion custom dictionary.

        For more information see `FT.SPELLCHECK <https://redis.io/commands/ft.spellcheck>`_.
        r  r  r  r  Nr  r  s          r0   r  zAsyncSearchCommands.spellcheckÕ  s…   è ø€ ô ˜tŸ™°Ð6ˆÙØ�J‰J˜
 HÐ-Ô.áØ�J‰J˜ ¨GÐ4Ô5áØ�J‰J˜ ¨GÐ4Ô5à(�D×(Ñ(¨#Ð.×.ˆà×"Ñ"¤>°3Ó7Ð7ð /ús   ‚A'BÁ)BÁ*Br  rÊ   r  c              ƒ   óZ   K  — t         d||g} | j                  |Ž ƒ d{  –—† }|dk(  S 7 Œ	­w)r  r  Nr  r   r"  s        r0   r#  zAsyncSearchCommands.config_setñ  s:   è ø€ ô ˜5 &¨%Ð0ˆØ(�D×(Ñ(¨#Ð.×.ˆØ�d‰{Ðð /ús   ‚+Ÿ) 
+c              ƒ   ó~   K  — t         d|g}i } | j                  |Ž ƒ d{  –—† }| j                  t         |«      S 7 Œ­w)r%  r&  Nr'  r(  s       r0   r)  zAsyncSearchCommands.config_getÿ  sF   è ø€ ô ˜5 &Ð)ˆØˆØ(�D×(Ñ(¨#Ð.×.ˆØ×"Ñ"¤:¨sÓ3Ð3ð /ús   ‚= ;¡=c              ƒ   ó  K  — | j                   j                  |«      ƒ d{  –—† }|j                  «       D ��ci c]  \  }}t        |«      t        |«      “Œ }}}|}	 |d= t        dd|i|¤ŽS 7 ŒLc c}}w # t        $ r Y Œ w xY w­w)r²   Nr³   rY   r´   r·   s         r0   r»   z!AsyncSearchCommands.load_document  s‹   è ø€ ð —{‘{×*Ñ*¨2Ó.×.ˆØ5;·\±\´^ÔD±^©T¨Q°Œi˜‹lœI a›LÑ(°^ˆÑDØˆð	Ø�t�ô Ñ(˜2Ð( Ñ(Ð(ð /úÛDøô
 ò 	Ùð	üsD   ‚B¡A.¢B¹A0ÁBÁA6 Á!BÁ0BÁ6	BÁ?BÂBÂBc              �   ó„  K  — | j                  d¬«      }|D ]‰  }t        ||j                  |j                  g}|j	                  d«      r|j                  d«       |j                  r,|j                  d«       |j                  |j                  «        |j                  |Ž  Œ‹ |j                  «       ƒ d{  –—† d   S 7 Œ­w)aI  
        Add suggestion terms to the AutoCompleter engine. Each suggestion has
        a score and string.
        If kwargs["increment"] is true and the terms are already in the
        server's dictionary, we increment their scores.

        For more information see `FT.SUGADD <https://redis.io/commands/ft.sugadd>`_.
        Fr:  r<  r=  r“   Nr>  r?  rD  s          r0   rH  zAsyncSearchCommands.sugadd  sœ   è ø€ ð �}‰}¨ˆ}Ó/ˆÛˆCÜ" C¨¯©°S·Y±YÐ?ˆDØ�z‰z˜+Ô&Ø—‘˜FÔ#Ø�{Š{Ø—‘˜IÔ&Ø—‘˜CŸK™KÔ(à ˆD× Ñ  $Ò'ð ð —l‘l“n×$ bÑ)Ð)Ð$ús   ‚B4C Â6B>Â7C rÉ   rO  rP  rQ  r>   rR  c              ƒ   ó,  K  — t         ||d|g}|r|j                  t        «       |r|j                  t        «       |r|j                  t        «        | j
                  |Ž ƒ d{  –—† }g }	|s|	S t        |||«      }
|
D �cg c]  }|‘Œ c}S 7 Œ'c c}w ­w)rT  rU  NrV  )r,   rÉ   rO  rP  rQ  r>   rR  ry   ÚretrX  rY  rZ  s               r0   r[  zAsyncSearchCommands.sugget3  s•   è ø€ ôP   V¨U°CÐ8ˆÙØ�K‰KœÔÙØ�K‰Kœ
Ô#ÙØ�K‰KœÔ%à(�D×(Ñ(¨$Ð/×/ˆØˆÙØˆNä! +¨}¸cÓBˆÙ!Ó"™6�a’˜6Ñ"Ð"ð 0úò #ùs$   ‚A#BÁ%BÁ&BÂ	BÂ
BÂBr4   rf  rg  )ri  rj  rk  rÅ   r   rÍ   r   r   rR   rm  rÝ   rñ   r  rë   r#  r)  r»   rH  r   r   r[  rY   r2   r0   rp  rp  ‰  s  „ ò	2ð ;?ñ
à�S˜%�ZÑ ð
ð ˜3  c¨3° oÑ 6Ð6Ñ7ó
ðF ;?ñ
à�S˜%�ZÑ ð
ð ˜3  c¨3° oÑ 6Ð6Ñ7ó
ó@8ð8 sð °3ð ¸4ó ð4 sð 4¨só 4ò)ò*ð6 ØØ!Ø#ñ6#àð6#ð ð6#ð ð	6#ð
 ð6#ð ð6#ð ð6#ð 
ÐÑ	ô6#r2   rp  )Nr~   rØ   Útypingr   r   r   r   Úredis.clientr   r   Úredis.utilsr	   Úhelpersr   r   Ú_utilr   Úaggregationr   r   r   Údocumentr   Úfieldr   ÚindexDefinitionr   r;   r   rM   r   rQ   r   r   rw   rˆ   rÙ   r™   r¥   ÚDROP_CMDrŽ   rß   ÚEXPLAINCLI_CMDr®   rì   rþ   rî   r  r  r  r  ÚGET_CMDr½   r!  r,  r0  r4  r7  rÃ   rA  rM  rJ  rW  r_  rb  r   r   r   r   r   r   r   r    r!   r"   r#   r%   rp  rY   r2   r0   Ú<module>r‡     s(  ðÛ Û ß .Ó .ç /Ý +ç 9Ý ß BÑ BÝ Ý Ý ,Ý Ý Ý (à
€à€
Ø€	Ø€
Ø
€Ø€Ø€Ø€Ø€Ø €Ø
€Ø€Ø€Ø€
Ø €Ø€Ø€Ø€Ø
€Ø€Ø€
Ø€Ø€Ø#Ð Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€à€	Ø€Ø€Ø
€Ø€Ø€	Ø€	Ø#€Ø€
Ø€Ø€÷E5ñ E5ôP`#˜.õ `#r2   