Php'de Like Haricinde Nasıl Arama Yaptırabilirim?
-
aşağıdaki gibi bir sorgu çalıştırıyorum. takdir edersinizki çok yavaş gerçekleşiyor ve cpu kullanımının ırzına geçiyor. bunu daha performanslı hale nasıl getirebilirim. şimdi fulltext search olayı varmış. bir satırlık sorguyla tablona yeni sıralayıcı ekliyormuşsun. fakat bu şekilde id sütunu sıralayıcı özelliğini kaybeder mi? wordpress üzerinde çalışıyorum 500mb'lık bir sql'im var, yedeğim de var; fakat upload olayı çok zaman alıyor. tecrübesi olanlar fikir verebilir mi? tablodaki kayıt sayısı 286 bin.
$sqlarama = mysql_query("select ID,post_content,guid from wp_posts where id NOT IN ('$ID') AND kontrol=0 AND post_status='publish' AND post_content like '% $arama%' limit 10");
-
FTS özelliği primary key'in sıralayıcı özelliğini engellemez.
Ancak wordpress innodb kullanmıyordu diye hatırlıyorum. O yüzden FTS özelliğini kullanmazasın.
Aslında bu işler için en iyi seçenek, lucence ya da spinx gibi bu işlere özel yazılımlar kurmak ve kullanmak.
-
DrKill bunu yazdı
FTS özelliği primary key'in sıralayıcı özelliğini engellemez.
Ancak wordpress innodb kullanmıyordu diye hatırlıyorum. O yüzden FTS özelliğini kullanmazasın.
Aslında bu işler için en iyi seçenek, lucence ya da spinx gibi bu işlere özel yazılımlar kurmak ve kullanmak.
valla hocam bir şekilde çözüm bulmam lazım. arama yaptırıp işlem yaptırıyorum ama bu şekilde işlemin tamamlanması için 5 yıl geçmesi gerekiyor. şunu 1 haftaya indirmem lazım :D
-
lepusmorris bunu yazdıDrKill bunu yazdı
FTS özelliği primary key'in sıralayıcı özelliğini engellemez.
Ancak wordpress innodb kullanmıyordu diye hatırlıyorum. O yüzden FTS özelliğini kullanmazasın.
Aslında bu işler için en iyi seçenek, lucence ya da spinx gibi bu işlere özel yazılımlar kurmak ve kullanmak.
valla hocam bir şekilde çözüm bulmam lazım. arama yaptırıp işlem yaptırıyorum ama bu şekilde işlemin tamamlanması için 5 yıl geçmesi gerekiyor. şunu 1 haftaya indirmem lazım :D
2-3 sn dede bulursun. O zaman sana http://sphinxsearch.com/
diyorum.
ya da
https://lucene.apache.org/core/
EĞER KOMPLE MYSQL çözümü yapmak istiyorsan (genede önermiyorum bir lucene veya sphinx kadar hızlı OLAMAZ!) tavsiyelerimi dinle:
NOT IN deki $ID çok fazla id içeriyorsa (12,54,46,78......) kesinlike NOT IN kullanma. Mümkünse inner join kullan
post_status ve kontrol gibi sütunları indexle
engine olarak innoDB kullan ve post_content a FTS özelliğini etkinleştir.
Aramaları FTS arama komutlarıyla yap örnek:
SELECT COUNT(*) FROM post_content WHERE MATCH($arama);
MYSQL den yeterince performans alamazsan MARIADB yi çok övüyorlar ona geçebilirsin. Zaten hiçbir şeyini değiştirmene gerek yok mariaDB mysql ile %100 uyumlu. Vikipedia gibi bir çok büyük kuruluş MARIADB ye geçti.
ORACLE MYSQL i skip atıyor. Yani harbiden skip atıyor. OpenSource code paylaşımcılarının kodlarını felan hiç siklemiyor. MYSQL oracle'ın geliştirdiği kadarıyla gelişiyor ne yazık ki.
DrKill tarafından 04/Eyl/15 16:00 tarihinde düzenlenmiştir -
DrKill bunu yazdılepusmorris bunu yazdıDrKill bunu yazdı
FTS özelliği primary key'in sıralayıcı özelliğini engellemez.
Ancak wordpress innodb kullanmıyordu diye hatırlıyorum. O yüzden FTS özelliğini kullanmazasın.
Aslında bu işler için en iyi seçenek, lucence ya da spinx gibi bu işlere özel yazılımlar kurmak ve kullanmak.
valla hocam bir şekilde çözüm bulmam lazım. arama yaptırıp işlem yaptırıyorum ama bu şekilde işlemin tamamlanması için 5 yıl geçmesi gerekiyor. şunu 1 haftaya indirmem lazım :D
2-3 sn dede bulursun. O zaman sana http://sphinxsearch.com/
diyorum.
ya da
https://lucene.apache.org/core/
EĞER KOMPLE MYSQL çözümü yapmak istiyorsan (genede önermiyorum bir lucene veya sphinx kadar hızlı OLAMAZ!) tavsiyelerimi dinle:
NOT IN deki $ID çok fazla id içeriyorsa (12,54,46,78......) kesinlike NOT IN kullanma. Mümkünse inner join kullan
post_status ve kontrol gibi sütunları indexle
engine olarak innoDB kullan ve post_content a FTS özelliğini etkinleştir.
Aramaları FTS arama komutlarıyla yap örnek:
SELECT COUNT(*) FROM post_content WHERE MATCH($arama);
MYSQL den yeterince performans alamazsan MARIADB yi çok övüyorlar ona geçebilirsin. Zaten hiçbir şeyini değiştirmene gerek yok mariaDB mysql ile %100 uyumlu. Vikipedia gibi bir çok büyük kuruluş MARIADB ye geçti.
ORACLE MYSQL i skip atıyor. Yani harbiden skip atıyor. OpenSource code paylaşımcılarının kodlarını felan hiç siklemiyor. MYSQL oracle'ın geliştirdiği kadarıyla gelişiyor ne yazık ki.
teşekkür ederim hocam. şimdi hosting kullanıyorum. sphinx'in hosting için dökümanlarını inceliyorum ama büyük ihtimal 2. söylediklerini kullanabilirim. bir de fts, innodb de çalışmıyor diye okumuştum. demek yanlış bilgiymiş.
-
lepusmorris bunu yazdı
teşekkür ederim hocam. şimdi hosting kullanıyorum. sphinx'in hosting için dökümanlarını inceliyorum ama büyük ihtimal 2. söylediklerini kullanabilirim. bir de fts, innodb de çalışmıyor diye okumuştum. demek yanlış bilgiymiş.
Mysql'in mağradan kalma bir sürümünü kullanıyorsan çalışmaz tabi.
https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html
-
Önerim imkan varsa verileri solr a atman ve oradan arama yaptırmandır misal şuan yaklaşık 2milyon verinin 150gb kadar alan kaplayan veri içinde arabalarımız solr üzerinden yapıyoruz hiç sorun çıkarmıyor üstelik pivot bile alınırken
Ekleme: wordpress in solr eklentisi var işinide kolaylaştırır sadece schema oluşturmada biraz zorlanabilirsin ama dökümanı boldur.
Ccaglayan tarafından 04/Eyl/15 18:03 tarihinde düzenlenmiştir -
şuan önerileri denemiş bulunmaktayım ve bu fulltext search olayı ne kadar manyak bişeymiş. ağlamak istiyorum sayın seyirciler :D
yalnız tam eşleşen kelimeleri buldurtamıyorum ve şu "IN BOOLEAN MODE" nedir ne işe yarar çözemedim. kaynakları taradım çift tırnak arasına almamısöylüyolar ama yedirtemiyorum bir türlü. örnek sorgum;
$arama = mysql_query("SELECT ID,guid FROM wp_posts WHERE MATCH(post_content) AGAINST ('Ben Her Bahar Aşık Olurum' IN BOOLEAN MODE) AND kontrol=1");
bu arada ruh halim (temsili):
https://www.youtube.com/watch?v=hPyUE7qZofc
lepusmorris tarafından 06/Eyl/15 06:50 tarihinde düzenlenmiştir
