Bunu yapabilmek için Mysql'i kaynak paketlerinden derleyerek kurmalı ya da derlenmiş sürümünü Sphinx'in sitesinden indirmelisiniz.
Mysql'i sphinx desteği ile nasıl derleyeceğiniz aşağıda anlatılmaktadır. Bu yazıda sadece sphinx ile ilgili kısımlar anlatılmaktadır. Mysql'i nasıl çalıştıracağınıza dair bilgiler yoktur. Bu bilgilere mysql'in sitesinden ulaşabilirsiniz.
Sphinx Storage Engine Kurulumu
İlk olarak mysql (5.0) ve sphinx'in son sürümlerinin kaynak kodlarını içeren paketleri indirmeli ve dosyaları açmalısınız. Mysql'in enterprise sürümünü şu adresten indirebilirsiniz :
http://mirror.provenscaling.com/mysql/enterprise/
# mkdir /tmp/source
# cd /tmp/source
# wget http://mirror.provenscaling.com/mysql/enterprise/source/5.0/mysql-5.0.68.tar.gz
# wget http://www.sphinxsearch.com/downloads/sphinx-0.9.8.tar.gz
# tar xvfz mysql-5.0.68.tar.gz
# tar xvfz sphinx-0.9.8.tar.gz
Mysql dizinine girip elinizdeki mysql sürümünün numarasına en yakın numaralı yamayı (patch) sphinx-0.9.8/mysqlse/ dizini içinden alıp uygulamalısınız.# cd mysql-5.0.68
# patch -p1 < ../sphinx-0.9.8/mysqlse/sphinx.5.0.37.diff
patching file config/ac-macros/ha_sphinx.m4
patching file configure.in
Hunk #1 succeeded at 58 (offset 13 lines).
Hunk #2 succeeded at 2600 (offset 67 lines).
patching file libmysqld/Makefile.am
Hunk #3 succeeded at 68 (offset -1 lines).
patching file sql/handler.cc
Hunk #2 succeeded at 150 (offset -5 lines).
patching file sql/handler.h
Hunk #1 succeeded at 186 (offset 2 lines).
patching file sql/Makefile.am
Hunk #2 succeeded at 104 (offset -1 lines).
patching file sql/mysqld.cc
Hunk #1 succeeded at 6859 (offset 317 lines).
Hunk #2 succeeded at 7651 (offset 50 lines).
Hunk #3 succeeded at 7929 (offset 317 lines).
patching file sql/mysql_priv.h
Hunk #1 succeeded at 1416 (offset 52 lines).
patching file sql/set_var.cc
Hunk #1 succeeded at 878 (offset 10 lines).
patching file sql/sql_lex.h
patching file sql/sql_parse.cc
Hunk #2 succeeded at 2956 (offset 71 lines).
patching file sql/sql_yacc.yy
Hunk #1 succeeded at 8224 with fuzz 1 (offset 1172 lines).
Yamayı uyguladıktan sonra mysql içinde aşağıdaki komutları çalıştırmalısınız :
# sh BUILD/autorun.sh
# cp -R ../sphinx-0.9.8/mysqlse sql/sphinx
Artık Mysql'i derlemeye başlayabilirsiniz. Mysql'i sphinx ile derlemek için aşağıdaki şekilde configure etmelisiniz. # ./configure --with-sphinx-storage-engine
Eğer bir hata mesajı almıyorsanız sırasıyla şu komutlarla derleyebilirsiniz : # make
# make install
Mysql'i derlemeyi bitirip çalıştırdığınızda kontrol etmek için mysql içinden SHOW ENGINES komutunu kullanabilirsiniz. Aldığınız çıktıda SPHINX'in karşısındaki Support kolonunda YES yazmalı.mysql> SHOW ENGINES;
+--------+---------+---------------------------------+
| Engine | Support | Comment |
+--------+---------+---------------------------------+
| MyISAM | YES | Default engine as of MySQL .... |
......
| SPHINX | YES | Sphinx storage engine 0.9.8 |
............
+------------+---------+-----------------------------+
Mysql İçinden Sphinx'in Kullanımı
Sphinx Storage Engine ile oluşturulmuş tablolar mysql'in FEDERATED tablolarına benzer. Tabloda herhangi bir veri tutulmaz, sphinx daemon'u olan searchd'ye bağlanıp sonuçları mysql içinden almak için kullanılır.
Daha önceki yazımda oluşturduğumuz örneği kullanarak mysql içinden bunu nasıl kullanacağımıza bakalım.
İlk olarak mysql içinde sphinx'e bağlanmak için gerekli tabloyu oluşturalım :
mysql> CREATE TABLE `arama` (
`id` int(11) 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:3312/idx_content'
Kullanacağınız tablonun ilk üç kolonu mutlaka sırasıyla INTEGER, INTEGER ve VARCHAR olmalıdır. id kolonu sphinx'den dönecek olan sonucun unique id'sini, weight kolonu sonucun hesaplanmış olan weight değerini ve query ise aramada kullanılacak sorguyu tanımlar. Diğer kolonlar ise INTEGER ya da TIMESTAMP olabilir.CONNECTION içinde searchd'nin çalıştığı IP ve PORT numarası ile kullanacağımız indeksi tanımladık.
Şimdi bu tabloyu kullanarak mysql içinden bir sorgu yapalım.
mysql> SELECT * FROM arama WHERE query='test ;limit=10;';
+------------+--------+-----------------+----------+
| id | weight | query | group_id |
+------------+--------+-----------------+----------+
| 2500042872 | 2 | test ;limit=10; | 0 |
| 1200021423 | 2 | test ;limit=10; | 0 |
| 2500011157 | 2 | test ;limit=10; | 0 |
| 1200081879 | 2 | test ;limit=10; | 0 |
| 2500041669 | 2 | test ;limit=10; | 0 |
| 2500072784 | 2 | test ;limit=10; | 0 |
| 1200000397 | 2 | test ;limit=10; | 0 |
| 1200010161 | 2 | test ;limit=10; | 0 |
| 1200038948 | 2 | test ;limit=10; | 0 |
| 1200040882 | 2 | test ;limit=10; | 0 |
+------------+--------+-----------------+----------+
Gördüğünüz gibi daha önce search komutu ile aldığımız sonucun aynısını aldık. Buradaki asıl soru bu sonuçları daha etkin nasıl kullanabileceğimizdir. Arama yaptığımız tablo ile bu sonuçları birleştirirsek daha kullanışlı bir hale getirebiliriz :mysql> SELECT id,servicename,content FROM contents join sphinx on(contents.id=arama.id) WHERE query='test ;mode=extended;limit=10;';
+------------+-------------+------------------------------+
| MCID | contentname | title |
+------------+-------------+------------------------------+
| 2500042872 | test | motorsiklet test sürüşleri |
| 1200021423 | archive | test ve test |
| 2500011157 | archive | TEST |
| 1200081879 | test | ARAÇLARIN TEST KAZALARI |
| 2500041669 | archive | Kulak yaşınızı test edin |
| 2500072784 | test | TEST |
| 1200000397 | archive | test sürüşleri |
| 1200010161 | archive | domino test |
| 1200038948 | archive | TEST DRİVE |
| 1200040882 | archive | YENİ RENAULT LAGUNA TEST |
+------------+-------------+------------------------------+
Yapılan arama ile ilgili daha ayrıntılı bilgi istenirse sorgudan sonra şu komut kullanılabilir :mysql> show engine sphinx status;
+--------+-------+-------------------------------------------------+
| Type | Name | Status |
+--------+-------+-------------------------------------------------+
| SPHINX | stats | total: 476, total found: 476, time: 2, words: 1 |
| SPHINX | words | test:476:688 |
+--------+-------+-------------------------------------------------+
2 rows in set (0.00 sec)
Sphinx Storage Engine ile ilgili daha ayrıntılı bilgiyi şu linkten alabilirsiniz :http://www.sphinxsearch.com/doc.html#sphinxse-using
2 comments:
merhaba sphinix i windowsta install edip denemek istiyorum
daha once boyle bir deneyiminiz oldumu? sanirim dedicated server olmadan webe aktarmak pek olsi degil
saygilar
bulent korcan bkorcan@gmail.com
Windows'ta daha önce denemedim, fakat sitesinde sorunsuz çalıştığını söylüyor.
Dedicated olmadan pek mümkün değil. Eğer sphinx hosting yapan bir firma bulabilirsen belki olabilir, fakat var mı bilmiyorum.
Yorum Gönder