
    Nwg5                     <   d dl Z d dlZd dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZmZ 	 d dlZdej"                  cxk  rd	k  se ed d
lmZmZ  ej,                  de        G d de      Z G d de      Z G d de      Zy# e$ r	  ed      w xY w)    N)settings)
BaseEngine)ElasticsearchSearchBackendElasticsearchSearchQuery)	DJANGO_CT)MissingDependency)get_identifierget_model_ct)   r   r   )   r   r   )bulkscanz<ElasticSearch 2.x support deprecated, will be removed in 4.0zThe 'elasticsearch2' backend requires the                             installation of 'elasticsearch>=2.0.0,<3.0.0'.                             Please refer to the documentation.c                   z     e Zd Z fdZddZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fd	Z	 	 	 	 	 	 ddZ	 	 	 	 d	 fd	Z xZS )
Elasticsearch2SearchBackendc                 4    t        |   |fi | d | _        y N)super__init__content_field_name)selfconnection_aliasconnection_options	__class__s      _/var/www/horilla/myenv/lib/python3.12/site-packages/haystack/backends/elasticsearch2_backend.pyr   z$Elasticsearch2SearchBackend.__init__#   s    )@-?@"&    c                 h   |t        |t        t        f      sJ 	 |G| j                  j                  j                  | j                  d       d| _        i | _        d| _	        yg }|D ]%  }|j                  t        dt        |             ' ddddj                  |      iii}t        | j                  f|| j                  d	| j                         }d
 |D        }t!        | j                  f|| j                  d| j                          | j                  j                  j#                  | j                         y# t$        j&                  $ rZ | j(                  s |-| j*                  j-                  ddj                               Y y| j*                  j-                  d       Y yw xY w)z
        Clears the backend of all documents/objects for a collection of models.

        :param models: List or tuple of models to clear.
        :param commit: Not used.
        Ni  )indexignoreF:queryquery_stringz OR )r    r   c              3   ,   K   | ]  }d |d   d  yw)delete_id)_op_typer$   N ).0docs     r   	<genexpr>z4Elasticsearch2SearchBackend.clear.<locals>.<genexpr>G   s      BE#e*=s   )actionsr   )r   z2Failed to clear Elasticsearch index of models '%s',z#Failed to clear Elasticsearch index)
isinstancelisttupleconnindicesr#   
index_namesetup_completeexisting_mappingr   appendr   r
   joinr   _get_doc_type_optionr   refreshelasticsearchTransportErrorsilently_faillog	exception)r   modelscommitmodels_to_deletemodelr    	generatorr*   s           r   clearz!Elasticsearch2SearchBackend.clear'   s    ftUm444+	J~		!!((ts(K&+#(*%*.'#% # XE$++y,uBU,VWX
 nwDT8U.VW !II// //1		IR II#// //1	 		!!)))@++ 
	J%%!""HHH-.
 ""#HI
	Js    AE %CE AF1F10F1c                    t         |   |||||||||||||      }g }|||d<   |||z
  |d<   |

t               }
||j                  di        |j	                         D ]t  \  }}ddid|id}d	|v r|j                  d	      |d
   d	<   |j                  dd      rd|d<   d|v r|j                  d      |d<   |d   j                  |       ||d   |<   v ||j                  di        |j	                         D ]  \  }}|j                  d      j                         }|j                  dd      dk7  r|dvr|d   |d d }ddi||d|d|| j                  |j                  d            | j                  |j                  d            dgdiid|d   |<    |	-|j                  di        |	D ]  \  }}ddidd|iid|d   |<    |
D ]  }|j                  dd|ii        |rdd|j                  d      ii|d<   |d   d   }d |v r4d!|d    j                         v r|d   d   d    d!   d"   }n|d   d   d    g}n|}t        |      dk(  r|d#   |d   d   d <   |S d!d"|ii|d   d   d <   |S )$N)spelling_querywithindwithindistance_pointr=   limit_to_registered_modelsresult_classfromsizeaggs_typetermsfield)metarN   orderrP   global_scopeFTglobalfacet_filtergap_by
gap_amount   )monthyeardate_histogram)rO   interval
date_range
start_dateend_date)rJ   to)rO   ranges)rP   rZ   rL   r    r!   )rP   filterfilteredra   boolmustr   )r   build_search_kwargsset
setdefaultitemspopupdategetlower_from_pythonr4   keyslen)r   r!   sort_bystart_offset
end_offsetfields	highlightfacetsdate_facetsquery_facetsnarrow_queriesrD   rE   rF   rG   r=   rH   rI   kwargsfiltersfacet_fieldnameextra_optionsfacet_optionsvaluer[   qrb   another_filtersr   s                               r   re   z/Elasticsearch2SearchBackend.build_search_kwargs^   s   ( ,))'A% - 
  #)F6N!',6F6N! UNfb)28,,. @.$g.%7! m+5B5F5Fw5OM&)'2 $$^U;.2M(+!]24A4E4En4UM.1g&--m<2?v/@  "fb)*5*;*;*= & 99X.446 99\1-2x H 8
 */|)<hrlKH %&670?X&V'()8 150A0A,1IIl,C1* /3.?.?		*@U.V	%&+"
+*3v/@ #fb)*6 &$g.-/?@3v/   	;ANNNWaL9:	; )GVZZ5H+IJF7Ogz2H8#Xh/4466&,Woj&A(&KF&S'O (.gz'B8'L&MO")?#q(8G8Jw
+H5  V_59w
+H5 r   c                    ddl m}	 | j                  s| j                          |j                  j
                  }
|	| j                     j                         j                  |
      }|j                         }i }|||d<   |||z
  |d<   t        |      }	 dd|gd|igdii}g }|r|d	k7  rdd
d|iii}|j                  |       |t        t        dd      }|rt        |      rt        d |D              }n|r| j!                         }ng }t        |      dkD  rdt"        |ii}|j                  |       t        |      dkD  rdd|d   ddt%        |      iidii} | j&                  j(                  d|| j*                  dd| j-                         |}| j9                  ||      S # t.        j0                  $ r. | j2                  s | j4                  j7                  d|       i }Y Sw xY w)Nr   )connectionsfrom_rK   r    more_like_thisr$   )rs   likez*:*r!   #HAYSTACK_LIMIT_TO_REGISTERED_MODELSTc              3   2   K   | ]  }t        |        y wr   )r
   )r'   r@   s     r   r)   z=Elasticsearch2SearchBackend.more_like_this.<locals>.<genexpr>#  s     &Ou|E':&Os   rN   rb   rc   rd   )r    ra   )bodyr   _sourcezCFailed to fetch More Like This from Elasticsearch for document '%s')rI   r&   )haystackr   r2   setup_metaconcrete_modelr   get_unified_index	get_indexget_content_fieldr	   r4   getattrr   ro   sortedbuild_models_listr   r-   r/   searchr1   r6   r8   r9   r:   r;   r<   _process_results)r   model_instanceadditional_query_stringrq   rr   r=   rH   rI   ry   r   model_klassr   
field_nameparamsdoc_id	mlt_queryrx   additional_filtermodel_choicesmodel_filterraw_resultss                        r   r   z*Elasticsearch2SearchBackend.more_like_this   sS    	)""JJL %**99 --. Y{# 	
 ,,.
#*F7O!',6F6N/?	 $#-,"' 1'I  N&+Be+Knw8O.PQ%! %%&78)1-4CT.* #f+ &&O&O O+ !% 6 6 8 "=!A% ')])CD%%l3>"Q&"%.w%7'-^8L/M&N%	 +$))** oo ++-	
 K" $$[|$LL ++ 	%%HHU K	s   DF( (>G)(G)c                    t         |   |||||      }i }d|v ri i i d}|d   j                         D ]  \  }}	|	d   d   }
|
dk(  rR|	d   D cg c]  }|d   |d   f c}|d	   |<   d
|	d   v s<|	d   d
   dk(  sHt        |d	   |   d       }||d	   |<   e|
dk(  rB|	d   D cg c],  }t        j                  j                  |d   dz        |d   f. c}|d   |<   |
dk(  s|	d   |d   |<    ||d<   |S c c}w c c}w )Naggregations)rs   datesqueriesrP   rM   rN   bucketskey	doc_countrs   rQ   reverse_countc                     | d   S )NrW   r&   )xs    r   <lambda>z>Elasticsearch2SearchBackend._process_results.<locals>.<lambda>e  s    QRSTQU r   )r   rZ   i  r   r    r   ru   )r   r   rh   r   datetimeutcfromtimestamp)r   r   rt   rI   rG   geo_sortresultsru   r{   
facet_info
facet_type
individualsrtr   s                r   r   z,Elasticsearch2SearchBackend._process_resultsL  s    '*L.(
 [( "RB?F/:>/J/P/P/R Q+'/8
( +5Y*?9& $E*J{,CD9F8$_5 *V"44%f-g6/I"( &x 0 A~#C ADF8,_=#33 +5Y*?8 ' %-->> *5 1D 8 '{3	8F7OO4  7*9CK9PF9%o65Q6 #398s   C:%1C?)NT)Nr   N FNNNNNNNNNNN)Nr   NNNN)FNNF)	__name__
__module____qualname__r   rB   re   r   r   __classcell__)r   s   @r   r   r   "   s|    '5Jt #'%ET !%#'eMT + +r   r   c                       e Zd Zy)Elasticsearch2SearchQueryN)r   r   r   r&   r   r   r   r   z  s    r   r   c                       e Zd ZeZeZy)Elasticsearch2SearchEngineN)r   r   r   r   backendr   r    r&   r   r   r   r   ~  s    )G%Er   r   )r   warningsdjango.confr   haystack.backendsr   'haystack.backends.elasticsearch_backendr   r   haystack.constantsr   haystack.exceptionsr   haystack.utilsr	   r
   r8   __version__ImportErrorelasticsearch.helpersr   r   warnDeprecationWarningr   r   r   r&   r   r   <module>r      s        ( ) 1 722>Y> ?0HMMFU"< Up
	 8 	& &I  
	@ s   9B B