Heim  >  Artikel  >  php教程  >  Beispiel für die Implementierung eines inkrementellen Sphinx-Index

Beispiel für die Implementierung eines inkrementellen Sphinx-Index

大家讲道理
大家讲道理Original
2016-11-08 14:28:481127Durchsuche

Hinweis: Der inkrementelle Index von Sphinx wird tatsächlich über zwei Indizes implementiert (der Hauptindex wird jeden Morgen aktualisiert und der inkrementelle Index wird alle 5 Minuten generiert. Im Internet heißt es, dass er über den Index zu einem Index zusammengeführt werden kann). Zusammenführen, aber ich habe es versucht, aber es hat nicht wirklich zusammengeführt


sphinx inkrementelle Indexeinstellungen Die vorhandenen Daten in der Datenbank sind sehr umfangreich und es werden ständig neue Daten zur Datenbank hinzugefügt, und ich hoffe, dass sie abgerufen werden können. Eine vollständige Neuindizierung ist teuer, da die zu aktualisierenden Daten relativ klein sind. Zum Beispiel. Es gab Millionen Originaldaten, aber nur wenige Tausend neue. Auf diese Weise kann der Modus „Hauptindex inkrementeller Index“ verwendet werden, um eine Aktualisierungsfunktionalität nahezu in Echtzeit zu erreichen.
Das Das Grundprinzip der Implementierung dieses Modus besteht darin, zwei Datenquellen und zwei Indizes einzurichten und einen Hauptindex für die Daten einzurichten, die grundsätzlich nicht aktualisiert werden, und für die Daten, die neu sind Erstellen Sie inkrementelle Indizes für inkrementelle Daten. Die Aktualisierungshäufigkeit des Hauptindex kann länger eingestellt werden (z. B. jeden Tag um Mitternacht), während die Aktualisierungshäufigkeit des inkrementellen Index sehr kurz eingestellt werden kann (etwa einige Minuten). Rechts), sodass wir bei der Suche des Benutzers die Daten dieser beiden Indizes gleichzeitig abfragen können.
Es gibt eine einfache Implementierung unter Verwendung der Methode „Inkrementeller Index des Hauptindex“, um bei jeder Neuerstellung des Hauptindex eine Zähltabelle in der Datenbank aufzuzeichnen, sodass nur Sie Sie müssen die Daten nach dieser ID indizieren und diese Tabelle jedes Mal aktualisieren, wenn der Hauptindex neu erstellt wird.
Testbedingungen: Nehmen Sie die Standardkonfiguration von sphinx.conf als Beispiel, und die Datenbanktabellendaten nehmen auch example.sql als Beispiel.

1. Verwandte Tabellen erstellen

创建主索引表
 CREATE TABLE `sph_test1` (
  `id` int(10) unsigned NOT NULL,
  `weight` int(11) NOT NULL,
  `query` varchar(3072) CHARACTER SET latin1 NOT NULL,
  `group_id` int(11) DEFAULT NULL,
  KEY `query` (`query`)
) ENGINE=SPHINX DEFAULT CHARSET=utf8 CONNECTION='sphinx://127.0.0.1:9312/test1'
创建索引计数表
     CREATE TABLE `sph_counter` (
  `id` int(11) NOT NULL,
  `max_doc_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
)
创建增量索引表
 CREATE TABLE `sph_delta_test1` (
  `id` int(10) unsigned NOT NULL,
  `weight` int(11) NOT NULL,
  `query` varchar(3072) NOT NULL,
  `group_id` int(11) DEFAULT NULL,
  KEY `query` (`query`(1024))
) ENGINE=SPHINX DEFAULT CHARSET=utf8 CONNECTION='sphinx://127.0.0.1:9312/delta_test1'

2. sphinx.conf ändern

source src1{
       type                = mysql
       sql_host            = localhost
       sql_user            = yourusername
       sql_pass            = yourpassword
       sql_db              = test   //你所用的数据库
       sql_port            = 3306 //所用端口,默认是3306
       sql_query_pre       = SET NAMES utf8
       sql_query_pre       = sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM documents 
       sql_query = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title,\
                 content FROM documents \
               WHERE id<=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
}
// 注意:delta_src 中的sql_query_pre的个数需和main_src 对应,否则可能搜索不出相应结果
source delta_src1: src1{
         sql_ranged_throttle = 100
         sql_query_pre       = SET NAMES utf8
         sql_query_pre       = SET SESSION query_cache_type=OFF
         sql_query      = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents\
            WHERE id>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
}
index test1 //主索引{
       source           = src1
       path             = /usr/local/sphinx/var/data/test1
       charset_type     = utf-8    #这个是支持中文必须要设置的
       chinese_dictionary =/usr/local/sphinx/etc/xdict       #..........其它可以默认
}
 
index delta_test1: src1 //增量索引{
         source = delta_src1
         path     = /usr/local/sphinx/var/data/delta_src1
}

3 (kann Der Index wird wirksam, ohne den Dienst neu zu starten)

a. Generieren Sie jeden frühen Morgen einen vollständigen Index: ./indexer test1 --rotate

b. indexer delta_test1 --rotate


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn