Améliorations au moteur de recherche

This commit is contained in:
François Pelletier 2024-11-30 22:25:47 -05:00
parent fc6bd9f255
commit 4c68b473e1

View file

@ -136,8 +136,6 @@ st.title('Recherche dans tes contenus publiés sur le web')
collections = client.collections.retrieve() collections = client.collections.retrieve()
total_documents = sum(collection['num_documents'] for collection in collections) total_documents = sum(collection['num_documents'] for collection in collections)
st.write(f"Total documents indexés: {total_documents}")
# Champ de recherche # Champ de recherche
requete = st.text_input('Entrez votre requête de recherche') requete = st.text_input('Entrez votre requête de recherche')
@ -146,15 +144,14 @@ col1, col2 = st.columns(2)
date_debut = col1.date_input('Date de début', value=datetime.now() - pd.DateOffset(years=1)) date_debut = col1.date_input('Date de début', value=datetime.now() - pd.DateOffset(years=1))
date_fin = col2.date_input('Date de fin', value=datetime.now()) date_fin = col2.date_input('Date de fin', value=datetime.now())
# Filtre de réseau social # Filtre de réseau social et de langue
col3, col4 = st.columns(2)
reseaux = get_networks() reseaux = get_networks()
reseaux_selectionnes = st.multiselect('Sélectionnez les réseaux sociaux', reseaux, reseaux_selectionnes = col3.multiselect('Sélectionnez les réseaux sociaux', reseaux,
default=reseaux[0] if reseaux else None) default=reseaux[0] if reseaux else None)
# Filtre de langue
langues = [('fr', 'Français'), ('en', 'English')] langues = [('fr', 'Français'), ('en', 'English')]
langue_selectionnees = st.multiselect('Sélectionnez la langue', langue_selectionnees = col4.multiselect('Sélectionnez la langue',
options=[label for code, label in langues], options=[label for code, label in langues],
format_func=lambda x: x, format_func=lambda x: x,
default='Français') default='Français')
@ -162,6 +159,9 @@ langue_selectionnees = st.multiselect('Sélectionnez la langue',
# Convertir les étiquettes en codes de langage # Convertir les étiquettes en codes de langage
selected_lang_codes = [code for code, label in langues if label in langue_selectionnees] selected_lang_codes = [code for code, label in langues if label in langue_selectionnees]
# Filtre sur le nombre de mots
nombre_mots = st.slider('Nombre de mots minimum', min_value=0, max_value=1000, value=100, step=10)
if st.button('Rechercher'): if st.button('Rechercher'):
# Préparer les filtres # Préparer les filtres
debut_datetime = datetime.combine(date_debut, time.min) debut_datetime = datetime.combine(date_debut, time.min)
@ -169,15 +169,16 @@ if st.button('Rechercher'):
filtre_date = f"creation_timestamp:[{int(debut_datetime.timestamp())}..{int(fin_datetime.timestamp())}]" filtre_date = f"creation_timestamp:[{int(debut_datetime.timestamp())}..{int(fin_datetime.timestamp())}]"
filtre_reseau = f"network:[{' '.join(reseaux_selectionnes)}]" if reseaux_selectionnes else None filtre_reseau = f"network:[{' '.join(reseaux_selectionnes)}]" if reseaux_selectionnes else None
filtre_langue = f"langue:[{' '.join(selected_lang_codes)}]" if selected_lang_codes else None filtre_langue = f"langue:[{' '.join(selected_lang_codes)}]" if selected_lang_codes else None
filtre_mots = f"nombre_de_mots:[{nombre_mots}..10000]" if nombre_mots > 0 else None
filtres = ' && '.join(filter(None, [filtre_date, filtre_reseau, filtre_langue])) filtres = ' && '.join(filter(None, [filtre_date, filtre_reseau, filtre_langue, filtre_mots]))
# Effectuer la recherche pour tous les résultats # Effectuer la recherche pour tous les résultats
tous_resultats = rechercher_documents(requete, ces_filtres=filtres, facette_par='network') tous_resultats = rechercher_documents(requete, ces_filtres=filtres, facette_par='network')
nombre_total_resultats = tous_resultats['found'] nombre_total_resultats = tous_resultats['found']
# Afficher le nombre total de résultats # Afficher le nombre total de résultats
st.subheader(f"Trouvé {nombre_total_resultats} résultats") st.subheader(f"Trouvé {nombre_total_resultats} résultats parmi {total_documents } documents indexés")
# Affichage des résultats (100 maximum) # Affichage des résultats (100 maximum)
st.subheader("Résultats de la recherche") st.subheader("Résultats de la recherche")
@ -189,7 +190,9 @@ if st.button('Rechercher'):
st.markdown(f"**{hit['document']['network']}**") st.markdown(f"**{hit['document']['network']}**")
st.markdown( st.markdown(
f"**{datetime.fromtimestamp(hit['document']['creation_timestamp']).strftime('%Y-%m-%d %H:%M:%S')}**") f"**{datetime.fromtimestamp(hit['document']['creation_timestamp']).strftime('%Y-%m-%d %H:%M:%S')}**")
st.markdown(f"**{hit['document']['nombre_de_mots']} mots**")
# Score
st.markdown(f"**Score: {hit["hybrid_search_info"]['rank_fusion_score']}**")
# Étiquettes de couleur pour les facettes # Étiquettes de couleur pour les facettes
st.markdown(f""" st.markdown(f"""
<span style="background-color: #007bff; color: white; padding: 2px 6px; border-radius: 10px;"> <span style="background-color: #007bff; color: white; padding: 2px 6px; border-radius: 10px;">