2017-09-14 4 views
0

Bonjour à tous, je travaille sur un projet Django avec une base de données backend en tant que serveur PostgreSQL. et j'ai choisi elastic search comme moteur de recherche pour mon projet.indexer le contenu db à la recherche élastique

J'ai utilisé elastic search-dsl-py pour créer un mappage entre les modèles Django et le type doc elastic search. et utiliser Django signals pour capturer les événements update et delete. A propos, je n'ai pas mappé tous les champs du modèle Django à la recherche élastique.

Lorsqu'une recherche d'utilisateur à il/elle obtient une liste d'un article à la page d'accueil du serveur de recherche élastique. Lorsque l'utilisateur clique sur la liste d'éléments. Où devrais dans le elastic_search server ou dans le Postgres server

Si je mets tous les détails de chaque objet dans un serveur élastique, il va être une douleur pour moi, j'interroger les données de détail d'un élément, il y a un relation imbriquée dans les modèles Django. Si je ne mets pas tous les détails dans le serveur de recherche élastique, j'ai besoin d'interroger la base de données, pour obtenir le détail d'un élément qui va être lent par rapport à une requête de recherche élastique.

Quelle approche devrais-je prendre?

Indexez toutes les propriétés avec la relation imbriquée dans le serveur de recherche élastique et effectuez toute l'opération d'interrogation sur la recherche élastique.

OU

Index uniquement le champ nécessaire dans le serveur de recherche élastique, et pour la vue détaillée, faire requête q à la base de données avec l'identifiant de champ obligatoire.

Est-ce que quelqu'un a ce genre d'expérience avant?

Répondre

1

Cette décision dépend vraiment de ce que vous essayez d'adresser avec la recherche élastique. Récemment, j'ai travaillé sur un projet utilisant la recherche élastique. La raison était d'accélérer la recherche et de fournir de meilleurs résultats de recherche. Cependant, le détail du produit sélectionné est interrogé à partir de la base de données (mssql). La décision de cartographier tout ou partie des champs dépend de ce que vous vouliez de la recherche élastique.Si c'est pour un meilleur résultat de recherche (résultat + vitesse) alors je vous suggère de cartographier uniquement les champs qui aident l'utilisateur à chercher.