En plus de répondre aux requêtes d'OP, permettez-moi de vous donner quelques informations sur Apache Solr, de la simple introduction à l'installation et à la mise en œuvre détaillées .
Introduction simple
Quiconque a déjà eu de l'expérience avec les moteurs de recherche ci-dessus, ou d'autres moteurs ne figurant pas dans la liste - j'aimerais entendre vos opinions.
Solr ne doit pas être utilisé pour résoudre des problèmes en temps réel. Pour les moteurs de recherche, Solr est à peu près un jeu et fonctionne parfaitement .
Solr fonctionne très bien sur les applications Web à haut trafic ( j'ai lu quelque part que cela ne convient pas à cela, mais je sauvegarde cette déclaration ). Il utilise la RAM, pas le CPU.
- pertinence et classement des résultats
Le boost vous aide à classer vos résultats en tête de liste. Dites, vous essayez de rechercher un nom john dans les champs prénom et nom , et vous voulez donner de la pertinence à la champ prénom , vous devez ensuite augmenter le champ prénom comme indiqué.
http://localhost:8983/solr/collection1/select?q=firstname:john^2&lastname:john
Comme vous pouvez le voir, le champ du prénom est boosté avec un score de 2.
Plus sur SolrRelevancy
- vitesse de recherche et d'indexation
La vitesse est incroyablement rapide et aucun compromis à ce sujet. La raison pour laquelle j'ai déménagé chez Solr .
Concernant la vitesse d'indexation, Solr peut également gérer les JOINS à partir de vos tables de base de données. Un JOIN plus élevé et complexe affecte la vitesse d'indexation. Cependant, une énorme configuration de RAM peut facilement résoudre ce problème.
Plus la RAM est élevée, plus la vitesse d'indexation de Solr est rapide.
- facilité d'utilisation et facilité d'intégration avec Django
Je n'ai jamais essayé d'intégrer Solr et Django , mais vous pouvez le faire avec Haystack . J'ai trouvé un article intéressant sur le même et voici le github pour cela.
- ressources requises - le site sera hébergé sur un VPS, donc idéalement le moteur de recherche ne nécessiterait pas beaucoup de RAM et de CPU
Solr se reproduit sur la RAM, donc si la RAM est élevée, vous n'avez pas à vous soucier de Solr .
L' utilisation de la RAM de Solr grimpe sur l'indexation complète si vous avez quelques milliards d'enregistrements, vous pouvez utiliser intelligemment les importations Delta pour faire face à cette situation. Comme expliqué, Solr n'est qu'une solution en temps quasi réel .
Solr est hautement évolutif. Jetez un oeil sur SolrCloud . Quelques caractéristiques clés de celui-ci.
- Shards (ou sharding est le concept de distribution de l'index entre plusieurs machines, par exemple si votre index est devenu trop grand)
- Équilibrage de charge (si Solrj est utilisé avec le cloud Solr, il s'occupe automatiquement de l'équilibrage de charge en utilisant son mécanisme Round-Robin)
- Recherche distribuée
- La haute disponibilité
- fonctionnalités supplémentaires telles que "vouliez-vous dire?", recherches associées, etc.
Pour le scénario ci-dessus, vous pouvez utiliser le SpellCheckComponent fourni avec Solr . Il existe de nombreuses autres fonctionnalités, le SnowballPorterFilterFactory permet de récupérer des enregistrements, par exemple si vous avez tapé des livres au lieu du livre , les résultats liés au livre vous seront présentés .
Cette réponse se concentre largement sur Apache Solr et MySQL . Django est hors de portée.
En supposant que vous êtes sous environnement LINUX, vous pouvez continuer cet article. (le mien était une version Ubuntu 14.04)
Installation détaillée
Commencer
Téléchargez Apache Solr à partir d' ici . Ce serait la version 4.8.1 . Vous pouvez télécharger de nouvelles versions, j'ai trouvé cette écurie.
Après avoir téléchargé l'archive, extrayez-la dans un dossier de votre choix. Dites .. Downloads
ou quoi que ce soit .. Donc ça ressembleraDownloads/solr-4.8.1/
À votre invite. Naviguez dans le répertoire
shankar@shankar-lenovo: cd Downloads/solr-4.8.1
Alors maintenant, vous êtes ici ..
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1$
Démarrez Jetty Application Server
Jetty est disponible dans le dossier d'exemples du solr-4.8.1
répertoire, alors parcourez-le et démarrez Jetty Application Server.
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar
Maintenant, ne fermez pas le terminal, minimisez-le et laissez-le de côté.
(CONSEIL: utilisez & après start.jar pour exécuter Jetty Server en arrière-plan)
Pour vérifier si Apache Solr fonctionne correctement, visitez cette URL sur le navigateur.http: // localhost: 8983 / solr
Exécution de Jetty sur un port personnalisé
Il s'exécute sur le port 8983 par défaut. Vous pouvez modifier le port ici ou directement à l'intérieur du jetty.xml
fichier.
java -Djetty.port=9091 -jar start.jar
Téléchargez JConnector
Ce fichier JAR agit comme un pont entre MySQL et JDBC, téléchargez la version indépendante de la plateforme ici
Après l'avoir téléchargé, extrayez le dossier et copiez-le mysql-connector-java-5.1.31-bin.jar
et collez-le dans le répertoire lib .
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/contrib/dataimporthandler/lib
Création de la table MySQL à lier à Apache Solr
Pour utiliser Solr , vous devez disposer de tableaux et de données à rechercher. Pour cela, nous allons utiliser MySQL pour créer une table et pousser des noms aléatoires, puis nous pourrions utiliser Solr pour se connecter à MySQL et indexer cette table et ses entrées.
1. structure du tableau
CREATE TABLE test_solr_mysql
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(45) NULL,
created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
2. remplir le tableau ci-dessus
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jean');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jack');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jason');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Vego');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Grunt');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jasper');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Fred');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jenna');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Rebecca');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Roland');
Entrer dans le noyau et ajouter les directives lib
1. Naviguez vers
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1/example/solr/collection1/conf
2.Modification du solrconfig.xml
Ajoutez ces deux directives à ce fichier.
<lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />
Ajoutez maintenant le DIH (Data Import Handler)
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler" >
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>
3.Créez le fichier db-data-config.xml
Si le fichier existe, ignorez-le, ajoutez ces lignes à ce fichier. Comme vous pouvez le voir sur la première ligne, vous devez fournir les informations d'identification de votre base de données MySQL . Le nom, le nom d'utilisateur et le mot de passe de la base de données.
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/yourdbname" user="dbuser" password="dbpass"/>
<document>
<entity name="test_solr" query="select CONCAT('test_solr-',id) as rid,name from test_solr_mysql WHERE '${dataimporter.request.clean}' != 'false'
OR `created` > '${dataimporter.last_index_time}'" >
<field name="id" column="rid" />
<field name="solr_name" column="name" />
</entity>
</document>
</dataConfig>
(CONSEIL: vous pouvez avoir n'importe quel nombre d'entités mais faites attention au champ id, si elles sont identiques, l'indexation sera ignorée.)
4.Modifiez le fichier schema.xml
Ajoutez ceci à votre schema.xml comme indiqué.
<uniqueKey>id</uniqueKey>
<field name="solr_name" type="string" indexed="true" stored="true" />
la mise en oeuvre
Indexage
C'est où la vraie affaire est. Vous devez effectuer l'indexation des données de MySQL vers Solr afin d'utiliser les requêtes Solr.
Étape 1: Accédez au panneau d'administration Solr
Appuyez sur l'URL http: // localhost: 8983 / solr sur votre navigateur. L'écran s'ouvre comme ceci.
Comme l'indique le marqueur, accédez à Connexion pour vérifier si l'une des configurations ci-dessus a entraîné des erreurs.
Étape 2: vérifiez vos journaux
Ok donc maintenant vous êtes ici, Comme vous pouvez, il y a beaucoup de messages jaunes (AVERTISSEMENTS). Assurez-vous que les messages d'erreur ne sont pas marqués en rouge. Plus tôt, dans notre configuration, nous avions ajouté une requête de sélection sur notre db-data-config.xml , disons que s'il y avait des erreurs sur cette requête, cela se serait affiché ici.
Très bien, pas d'erreurs. Nous sommes prêts à partir. Choisissons collection1 dans la liste comme illustré et sélectionnez Dataimport
Étape 3: DIH (gestionnaire d'importation de données)
En utilisant le DIH, vous vous connecterez à MySQL depuis Solr via le fichier de configuration db-data-config.xml à partir de l' interface Solr et récupérerez les 10 enregistrements de la base de données qui sera indexée sur Solr .
Pour ce faire, choisissez l' importation complète et cochez les options Nettoyer et valider . Maintenant, cliquez sur Exécuter comme indiqué.
Vous pouvez également utiliser une requête d' importation complète directe comme celle-ci également.
http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true
Une fois que vous avez cliqué sur Exécuter , Solr commence à indexer les enregistrements.S'il y a eu des erreurs, l' indication Échec de l'indexation indique que vous devez revenir à la section Journalisation pour voir ce qui ne va pas.
En supposant qu'il n'y a pas d'erreur avec cette configuration et si l'indexation est terminée avec succès., Vous obtiendrez cette notification.
Étape 4: exécution des requêtes Solr
Il semble que tout se soit bien passé, vous pouvez désormais utiliser Solr Queries pour interroger les données indexées. Cliquez sur la requête sur la gauche, puis appuyez sur Exécuter sur le bouton en bas.
Vous verrez les enregistrements indexés comme indiqué.
La requête Solr correspondante pour répertorier tous les enregistrements est
http://localhost:8983/solr/collection1/select?q=*:*&wt=json&indent=true
Eh bien, il y a les 10 enregistrements indexés. Disons, nous n'avons besoin que des noms commençant par Ja , dans ce cas, vous devez cibler le nom de la colonne solr_name
, c'est pourquoi votre requête se présente comme suit.
http://localhost:8983/solr/collection1/select?q=solr_name:Ja*&wt=json&indent=true
Voilà comment vous écrivez des requêtes Solr . Pour en savoir plus, consultez ce bel article .