U
    cc                     @   sz   d dl mZ d dlmZ G dd dZG dd deZG dd deZG d	d
 d
eZG dd deZG dd deZ	dS )    )List)	DataErrorc                   @   s\   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zdeee eeedddZdd Zdd Zd
S )FieldNUMERICTEXTWEIGHTGEOTAGVECTORSORTABLENOINDEXASNF)nameargssortableno_indexas_namec                 C   s^   |d krg }|| _ || _t | _|| _|r8| jtj |rJ| jtj |rZ|sZt	dd S )Nz-Non-Sortable non-Indexable fields are ignored)
r   r   listargs_suffixr   appendr   r   r   
ValueError)selfr   r   r   r   r    r   U/var/www/html/project/venv/lib/python3.8/site-packages/redis/commands/search/field.py__init__   s    zField.__init__c                 C   s   | j | d S N)r   r   )r   valuer   r   r   
append_arg)   s    zField.append_argc                 C   s6   | j g}| jr|| j| jg7 }|| j7 }|| j7 }|S r   )r   r   r   r   r   )r   r   r   r   r   
redis_args,   s    

zField.redis_args)NFFN)__name__
__module____qualname__r   r   r   r   r	   r
   r   r   r   strr   boolr   r   r   r   r   r   r   r      s,       r   c                   @   s.   e Zd ZdZdZdZd
eeeeddd	Z	dS )	TextFieldzI
    TextField is used to define a text field in a schema definition
    NOSTEMPHONETIC      ?FN)r   weightno_stemphonetic_matcherc                 K   s^   t j| |fdt jt j|gi| |r4t | | j |rZ|dkrZt | | j t | | d S )Nr   )zdm:enzdm:frzdm:ptzdm:es)r   r   r   r   r   r%   r&   )r   r   r(   r)   r*   kwargsr   r   r   r   =   s    "zTextField.__init__)r'   FN)
r   r    r!   __doc__r%   r&   r"   floatr#   r   r   r   r   r   r$   5   s      r$   c                   @   s   e Zd ZdZedddZdS )NumericFieldzO
    NumericField is used to define a numeric field in a schema definition
    r   c                 K   s    t j| |fdt jgi| d S Nr   )r   r   r   r   r   r+   r   r   r   r   X   s    zNumericField.__init__Nr   r    r!   r,   r"   r   r   r   r   r   r.   S   s   r.   c                   @   s   e Zd ZdZedddZdS )GeoFieldzP
    GeoField is used to define a geo-indexing field in a schema definition
    r/   c                 K   s    t j| |fdt jgi| d S r0   )r   r   r   r1   r   r   r   r   a   s    zGeoField.__init__Nr2   r   r   r   r   r3   \   s   r3   c                   @   s,   e Zd ZdZdZdZd
eeedddZd	S )TagFieldzx
    TagField is a tag-indexing field with simpler compression and tokenization.
    See http://redisearch.io/Tags/
    	SEPARATORCASESENSITIVE,F)r   	separatorcase_sensitivec                 K   s:   t j| j|g}|r|| j t j| |fd|i| d S r0   )r   r	   r5   r   r6   r   )r   r   r8   r9   r+   r   r   r   r   r   n   s    zTagField.__init__N)r7   F)	r   r    r!   r,   r5   r6   r"   r#   r   r   r   r   r   r4   e   s        r4   c                   @   s"   e Zd ZdZeeedddZdS )VectorFieldz
    Allows vector similarity queries against the value in this attribute.
    See https://oss.redis.com/redisearch/Vectors/#vector_fields.
    )r   	algorithm
attributesc           
      K   s   | dd}| dd}|s |r(td| dkr<tdg }| D ]\}}	|||	g qHtj| |fdtj|t|f|i| dS )	a  
        Create Vector Field. Notice that Vector cannot have sortable or no_index tag,
        although it's also a Field.

        ``name`` is the name of the field.

        ``algorithm`` can be "FLAT" or "HNSW".

        ``attributes`` each algorithm can have specific attributes. Some of them
        are mandatory and some of them are optional. See
        https://oss.redis.com/redisearch/master/Vectors/#specific_creation_attributes_per_algorithm
        for more information.
        r   Fr   z5Cannot set 'sortable' or 'no_index' in Vector fields.)ZFLATZHNSWzIRealtime vector indexing supporting 2 Indexing Methods:'FLAT' and 'HNSW'.r   N)	getr   upperitemsextendr   r   r
   len)
r   r   r;   r<   r+   sortZnoindexZattr_likeyr   r   r   r   r   ~   s&     zVectorField.__init__N)r   r    r!   r,   r"   dictr   r   r   r   r   r:   x   s   r:   N)
typingr   Zredisr   r   r$   r.   r3   r4   r:   r   r   r   r   <module>   s   /		