2011-09-27 1 views

Répondre

2

Comme trouvé dans les sphinx documentation part about real-time indexes

index en temps réel (ou les index RT par souci de brièveté) sont un nouveau back-end qui vous permet d'insérer, mettre à jour ou supprimer des documents (lignes) à la volée.

Donc, pour mettre à jour un index à la volée vous juste besoin de faire une requête comme

{INSERT | REPLACE} INTO index [(column, ...)] 
VALUES (value, ...) 
[, (...)] 
+0

Alors, où courent-vous à ce SQL comme déclaration? Je suis en train de lire la documentation, mais tous leurs exemples montrent qu'elle est interrogée dans mysql tel quel. – lockdown

+0

Vous pouvez émettre cela via votre client MySQL favori –

2

Pour développer la réponse d'Anne - si vous utilisez des indices SQL, il ne sera pas automatiquement mise à jour . Vous pouvez gérer le processus de réindexation après chaque changement - mais cela peut être coûteux. Une façon de contourner cela est d'avoir un index de base avec tout, puis un index delta avec la même structure qui indexe seulement les changements (ceci pourrait être fait par une colonne booléenne ou timestamp). De cette façon, vous pouvez juste réindexer l'index delta (qui est plus petit, et donc plus rapide) sur une base super-régulière, et ensuite traiter le noyau et le delta ensemble moins régulièrement (mais encore mieux, le faire au moins du quotidien). Sinon, les nouveaux indices RT valent la peine d'être examinés - vous devez toujours mettre à jour les choses vous-même, et ce n'est pas lié à la base de données, donc c'est un état d'esprit différent. En outre: Les index RT n'ont pas toutes les fonctionnalités que les index SQL, donc vous devrez décider ce qui est plus important.

3

La réponse est non et vous devez dire à sphinx de réindexer votre db.

Il y a quelques étapes et les exigences que vous devez savoir:

  1. principal et delta sont
  2. exigence
  3. terme Vous devez d'abord indexer votre index principal.
  4. Après la première manche, vous pouvez delta index en le faisant tourner (pour vous assurer que le service est en cours d'exécution et les données sur le Web est peut être utilisé à l'époque)
  5. Avant d'aller plus loin, vous devez créer une table pour marquer vos "dernières lignes indexées". Le dernier ID de lignes indexées pourrait être utilisé pour le delta d'indexation suivant et la fusion delta en main.
  6. Vous devez fusionner votre index delta à l'index principal. comme à l'intérieur des documents sphinx http://sphinxsearch.com/docs/current.html#index-merging
  7. Redémarrez le service sphinx. CONSEILS: Créez votre propre programme qui pourrait exécuter l'index en utilisant C# ou d'autres langages. Vous pouvez essayer le calendrier des tâches de Windows peut également.

Voici ma conf:

source Main 
{ 
type   = mysql 

sql_host  = localhost 
sql_user  = root 
sql_pass  = password 
sql_db   = table1 
sql_port  = 3306 # optional, default is 3306 
sql_query_pre = REPLACE INTO table1.sph_counter SELECT 1, MAX(PageID) FROM table1.pages; 
sql_query  = \ 
    SELECT pd.`PageID`, pd.Status from table1.pages pd 
    WHERE pd.PageID>=$start AND pd.PageID<=$end \ 
    GROUP BY pd.`PageID` 

sql_attr_uint  = Status 

sql_query_info  = SELECT * FROM table1.`pages` pd WHERE pd.`PageID`=$id 
sql_query_range  = SELECT MIN(PageID),MAX(PageID)\ 
       FROM tabl1.`pages` 
sql_range_step  = 1000000 
} 


source Delta : Main 
{ 
sql_query_pre = SET NAMES utf8 

sql_query = \ 
    SELECT PageID, Status from pages \ 
    WHERE PageID>=$start AND PageID<=$end 

sql_attr_uint  = Status 

sql_query_info  = SELECT * FROM table1.`pages` pd WHERE pd.`PageID`=$id 
sql_query_range  = SELECT (SELECT MaxDoc FROM table1.sph_counter WHERE ID = 1) MinDoc,MAX(PageID) FROM table1.`pages`; 
sql_range_step  = 1000000 
} 


index Main 
{ 
source   = Main 
path   = C:/sphinx/data/Main 
docinfo   = extern 
charset_type  = utf-8 
} 


index Delta : Main 
{ 
    source = Delta 
path = C:/sphinx/data/Delta 
charset_type = utf-8 
} 
+1

Vous n'avez pas besoin de redémarrer searchd si vous passez le paramètre --rotate. – Christian

Questions connexes