Tam Metin cevap aramak mı?

3 Cevap php

Tamam ben şöyle bir MySQL veritabanı var

ID - an int and the unique ID of the recorded

Title - The name of the item

Description - The items description

Ben şu anda kullanıyorum, başlık ve anahtar kelimelerin açıklamasını hem de aramak istiyorum.

SELECT * From ‘item’ where title LIKE %key%

Orada çok veritabanında değil, ancak "bu anahtar" için arama gibi bulmuyor Ve bu işleri ve "bu o anahtar" Ben sitenin arama motorunu geliştirmek isteyen, ve hatta sıralama sistemi bir tür eklemek olabilir buna (ama uzakta uzun bir süre).

Sorusuna Yani, "tam metin arama" veritabanı tasarımı bir elyaf (söyleyebilirim kadarıyla) o denilen bir şey duydum, ama bu konuya bir Newby olma ben bu konuda bir şey biliyor ...

1) Eğer yararlı olacağını düşünüyor musunuz?

Ve ek questron ...

2) Ben bana doğru yönde işaret edecek veritabanı tasarımı / arama motoru tasarımı hakkında ne okuyabilirsiniz.

Bu alaka ise site şu anda (Ruby on Rails için dönüştürme düşüncesi aklımdan geçti uçtan bir uca) (bir çerçeve olmadan IE) Stright PHP ile yazılmış

update

Thanks all, I'll go for Fulltext search. And for any one finding this later, I found a good tutorial on fulltext search as well.

3 Cevap

'% Anahtar kelime%' tür arama ile sorun o sütun üzerinde bir dizin oluşturmak bile verimli düzenli bir tablo üzerinde arama hiçbir şekilde olmasıdır. Eğer telefon rehberinde o dize kadar nasıl görüneceğini düşünün. Optimize etmek için hiçbir yolu aslında var - tüm telefon defterini taramak için var - ve bu, MySQL ne tam tablo taraması.

Eğer 'anahtar'% bu aramayı değiştirmek ve bir dizin kullanıyorsanız, çok hızlı arama alabilirsiniz. Bu olsa, ne istediğiniz değil gibi geliyor.

Yani aklınızda olan, ben biraz arama / tam metin indeksleme kullanmış, ve burada birkaç artıları ve eksileri:

Pros

  • Çok hızlı
  • (Eğer herhangi bir sıralama kullanmak rağmen, varsayılan) sonuçları döndürür alaka düzeyine göre sıralanır
  • Kelimeler kullanılabilir durdurun.

Cons

  • Sadece MyISAM tabloları ile çalışır
  • Çok kısa kelimeleri (varsayılan minimum 4 harfleri) göz ardı edilir
  • Nerede yan tümcesi farklı SQL gerektirir, bu nedenle mevcut sorguları değiştirmeniz gerekir.
  • (Örneğin, 'kelime', sadece 'kelime' 'anahtar kelime' eşleşmeyen) kısmi dizeleri Eşleşmez

Here is some good documentation on full-text searching.

Başka bir seçenek de Sphinx gibi bir arama sistemi kullanmaktır. Bu son derece hızlı ve esnek olabilir. Bu arama için optimize edilmiş ve MySQL ile de entegre edilmiştir.

Ben MySQL tam metin ihtiyaçlarınız için yeterli olduğunu tahmin ediyorum, ama bu desteği yerleşik çok iyi ölçek değildir fazlalaştı. Ortalama büyüklüğü belgeler için bir kaç yüz bin satır gibi küçük masa boyutları için kullanılamaz olmaya başlar. Bu size daha fazla bir sorun haline olabileceğini düşünüyorsanız, muhtemelen zaten Sfenks'in içine bakmak gerekir. Ben şahsen java lucene kullanarak kendi çözümü uygulamak için tercih olsa da, MYSQL kullanıcılar için defacto standart oluyor. :)

Ayrıca, ben tam metin arama standart LIKE '% anahtar kelime%'-arama temelde farklı olduğunu belirtmek isterim. LIKE arama tam metin indeksleme aksine sağ yanındaki birbirlerine görünmesini yoksa birkaç anahtar kelimeler için arama yapmanızı sağlar. Google gibi standart arama motorları, örneğin, tam metin arama motorları bulunmaktadır.

Ayrıca Zend_Lucene düşünebilirsiniz. Saf PHP çünkü, Sfenks daha entegre etmek biraz daha kolay.