Projet

Général

Profil

Development #40743

opengis : recherche textuelle sur l'ensemble des éléments textes

Ajouté par Frédéric Péters il y a environ 4 ans. Mis à jour il y a presque 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
16 mars 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Dans la suite de #20535#note-9, on ajouterait à la définition des requêtes un attribut "propriétés pour la recherche" et on mettrait ces données dans une colonne dédiée. Ensuite on aurait un attribut ?q=whatever pour faire la recherche et retourner uniquement les points correspondant.


Fichiers

Révisions associées

Révision abd37a48 (diff)
Ajouté par Valentin Deniaud il y a presque 4 ans

opengis: add text search for queries (#40743)

Historique

#2

Mis à jour par Valentin Deniaud il y a presque 4 ans

Easy.

#3

Mis à jour par Frédéric Péters il y a presque 4 ans

Enregistrer le texte sans les accents ?

#4

Mis à jour par Valentin Deniaud il y a presque 4 ans

Frédéric Péters a écrit :

Enregistrer le texte sans les accents ?

Yep,

-            features = features.filter(text__icontains=q)
+            features = features.filter(text__icontains=simplify(q))
...
-                text = ' '.join(values)
+                text = simplify(' '.join(values))

#5

Mis à jour par Frédéric Péters il y a presque 4 ans

  • Statut changé de Solution proposée à Solution validée

Je valide mais amélioration pour ici ou un autre ticket : découper q en mots pour que la recherche donne du résultat peu importe l'ordre des mots. (et/ou à un moment basculer sur la vraie recherche fulltext de postgresql).

#6

Mis à jour par Valentin Deniaud il y a presque 4 ans

Oui c'est vrai que ce genre de recherche qui marche mal dès qu'il y a plusieurs mots est un peu insupportable, je préfère corriger ça dès maintenant.

En utilisant la recherche postgres :

--- a/passerelle/apps/opengis/models.py
+++ b/passerelle/apps/opengis/models.py
         if q:
-            features = features.filter(text__icontains=simplify(q))
+            features = features.filter(text__search=simplify(q))
         data = {

+ l'ajout dans INSTALLED_APPS de 'django.contrib.postgres' et un bout de test, ça marche tout à fait. Tant qu'à faire on pourrait aussi se passer de simplify en ajoutant __unaccent mais bon, comme ce champ n'est pas destiné à l'affichage peut-être bien que c'est mieux de faire comme ça niveau perf, dans le doute je laisse en l'état.

Je te laisse revalider ce petit changement.

#7

Mis à jour par Frédéric Péters il y a presque 4 ans

  • Statut changé de Solution proposée à Solution validée

Pour la partie unaccent ça peut venir dans un second temps, il faudra juste penser à faire attention parce que l'usager db n'a pas nécessairement les permissions nécessaires pour créer l'extension postgres, du coup ça demande de bricoler genre https://git.entrouvert.org/combo.git/tree/combo/apps/search/migrations/0007_french_fts.py

#8

Mis à jour par Valentin Deniaud il y a presque 4 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 401873e3f796b184f707fd80131bfa59b9c6f798
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Tue Apr 7 16:38:26 2020 +0200

    opengis: add text search for queries (#40743)
#9

Mis à jour par Frédéric Péters il y a presque 4 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF