Yedek alaka InnoDB tabloları MySQL tam metin için sıralama?

3 Cevap php

Ben MySQL InnoDB kullanarak ve bazı sütunlar üzerinde tam metin tarzı arama yapmak istiyorum ben. Alaka sırasına sonuçları sıralama en iyi yolu nedir?

Ben böyle bir şey yapmaya çalışıyorum:

SELECT columns,   
(LENGTH(column_name) - LENGTH(REPLACE(column_name, '%searchterm%', ''))) AS score
FROM table
WHERE column_name LIKE '%searchterm%'
ORDER BY score

Ben fazla 1 sütun arama veya birden fazla anahtar kelime kullanmaya başladıktan sonra ancak bu oldukça karmaşık hale gelecektir. Zaten birkaç yüzden yukarıdaki sorguyu basitleştirilmiş oluyor birleşimler var.

Herkes daha iyi bir yol önerebilir? Ben Sfenks vb gibi herhangi bir 3. parti yazılım kullanmak istemiyorum

3 Cevap

Ben Sfenks'in veya Solr bakmak alacaktı. Her iki MyISAM daha iyi Fts var ve ayrıca InnoDB-tablolar için çalışabilirsiniz.

Eğer başka bir motor kullanmak istemiyorsanız, size InnoDB tablonun bir "gölge" MyISAM kopyasını oluşturmak ve buna karşı tam metin arama çalıştırabilir. InnoDB masaya bazı uygun tetikleyiciler ile, MyISAM kopya nispeten kolay güncelleme olabilir. Ve InnoDB-yan kayıt yok ki şans karşı korumak için, yapılacak bir InnoDB tablo karşı geri katılabilirsiniz. Gibi bir şey:

SELECT MATCH(myisamtable.field1, myisamtable.field2, myisamtable.field3)
        AGAINST ('search terms') AS relevance,
    mysitamtable.field1, myisamtable.field2, myisamtable.field3
FROM myistamtable
RIGHT JOIN innodbtable ON myistamtable.commonID = innodbtable.commonID
WHERE (innodbtable.commonID IS NOT NULL) AND (MATCH(myisamtable.field1, myisamtable.field2, myisamtable.field3) AGAINST ('search terms') IN BOOLEAN MODE)
ORDER BY relevance DESC;

MySQL 5.6 (şu anda beta, Nisan 2012 itibarıyla), FULLTEXT indeksleri InnoDB tablolar için izin verilir, böylece (bkz. {[Daha fazla bağlantılar için vs InnoDB işlemleri ile tanıdık MyISAM arama sözdizimi, katılır, yabancı anahtarlar, kullanabilirsiniz 0)]}.