Nasıl PHP ve MySQL ile basit bir site arama uygulamak istiyorsunuz?

9 Cevap php

Kullanıcıların tırnak göndermenize olanak sağlayan bir site kuruyorum. Nasıl en uygun tırnak döndürür (nispeten basit?) Arama oluştururken hakkında gitmek istiyorsunuz?

Arama terimi "turkey" Örneğin eğer, o zaman kelime "turkey" yalnızca bir kez görünür tırnak önce iki kez görünür tırnak dönecekti.

(Ben alakasız sonuçlar filtre yardım için birkaç diğer kuralları eklemek istiyorum, ama benim asıl endişe olmasıdır.)

9 Cevap

Herkes ancak bir BÜYÜK ihtar farkında olmalı, MySQL tam metin arama öne sürüyor. Fulltext arama motoru MyISAM motor (nedeniyle tutarlılığı ve ASİT uyum için en sık kullanılan motor değil InnoDB) için kullanılabilir.

Yani birkaç seçeneğiniz var:

1. En basit yaklaşım, Particle Tree ile gösterilmiştir. Sen actaully saf SQL (hayır tam metin, hiçbir şey) kapalı aramalar sıralandığında alabilirsiniz. Aşağıdaki SQL sorgusu arama alanlarında bir dizelerinin sayısına kapalı tabanlı bir tablo ve rank sonuçlarını arayacaktır:

SELECT
    SUM(((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'term', '')))/4) +
        ((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'search', '')))/6))
    AS Occurrences
FROM
    posts AS p
GROUP BY
    p.id
ORDER BY
    Occurrences DESC

edited their example to provide a bit more clarity

Ekleyerek Yukarıdaki SQL sorgusu Üzerine Çeşitlemeler, NEREDE (p.body LIKE '% ne olursa olsun% size% istiyorum'), vb muhtemelen tam olarak ne gerek alırsınız ifadeler.

2. Tam metin desteklemek için veritabanı şemasını değiştirebilir. Genellikle ne Sphinx Fulltext Search Engine MySQL için kendi tabloya alıntı verileri bölmek için gibi eklentileri yüklemek zorunda kalmadan InnoDB tutarlılığını, ASİT uyum ve hız tutmak için yapılır. Temelde bir InnoDB tablo bir tablo Alıntılar olurdu, doğrusu senin METİN alan "veri" bir MyISAM tablo bir Quote_Data masanın üzerinde kimliğine işaret Eğer bir başvuru var "quote_data_id" olan daha. Sen, MyISAM tablo üzerinde FULLTEXT do InnoDB tabloları ile döndü kimlikleri katılmak ve voila sonuçları olabilir.

3. takın Sphinx. Bu bir iyi şanslar.

Eğer nitelendirdiği önüne alındığında, ben HIGHLY, basit bir veritabanı tabanlı site varsa beri sana sunulan 1 yaklaşım öneriyoruz. 1 çözüm, basit işi hızlı bir şekilde bitmiş olur. Eğer Lucene indeks dosyaları değil veritabanları esas tasarlanmış gibi veritabanı ile entegre etmek istiyorum özellikle lucene kurulum için bir orospu olacak. Google özel site arama sadece (amatörce ve kesmek görünmesini sağlar) Sitenize itibar ton kaybetmek yapar ve MySQL tam metin, veritabanı şeması büyük olasılıkla değiştirmeye sebep olacaktır.

Kullan Google Custom Site Search. Ben aradıkları hakkında bir iki şey biliyorum duydum.

Stackoverflow plans to use Lucene arama motoru. Orada Zend Framework için yazılmış bu bir PHP liman ama tüm ZF kabartmak gerek kalmadan ayrı bir varlık olarak indirebilirsiniz. Bu Zend_Search_Lucene olarak adlandırılır, documentation for which can be found here.

Bunun için SQL böyle bir şey (bunu 'türkiye' ile tırnak bulmak için çalışıyoruz nereye) bakacağız:

SELECT * FROM Quotes
WHERE the_quote LIKE "%turkeyt%";

Oradan bu sizin dışarı tükürüyor ne ile ne yapacağını anlamaya olabilir.

Düzgün davalarını dikkatli olun burada kötü niyetli bir kullanıcının olabilir inject malicious SQL veritabanı içine, sen www bu koyarak planlıyorsanız, özellikle eğer. Eğer olsa eğlenmek için yapıyoruz, ben sadece öğrenmek istediğiniz ne var sanırım.

Veritabanları ve sql için yeni iseniz, ben mysql üzerinde sqlite öneririz. Much daha kolay kurmak ve hiç set olarak, çalışmak. Bu ilk kez yüklemek ve mysql kurmak zorunda potansiyel baş ağrısı etrafında alırsınız.

Eğer kendi yazmak istiyorsanız, phpBB uygulanması bir göz atın. Onlar iki tablo var, ilk kayıtlarda görünen tüm kelimelerin eşsiz bir listesi ve ikinci kelime ve girişler arasında bir çok-çok referanstır. Daha sonra bir grup yapmak ve aradığınız şekilde kayıtları sıralamak için sayabiliriz.

Daha sonra bir üçüncü taraf arama motoru (veya tam metin araması) uygulanması çok daha fazla iş var, ama size sonuçları üzerinde daha fazla kontrol sağlayacak.

Sphinx ve Lucene alternatif olarak, nispeten basit bir arama motoru için Xapian kütüphane kullanılarak oluşturulabilir.

+ Supports many advanced search features (such as relevancy ranking)
+ Fast

- You would need to learn the API to create your interface
- Requires a php extension to be installed

Not Ayrıca Xapian mysql için ayrı bir dizin kendi veri depolar.

Ayrıca Forage, hangi Solr, Xapian ve Lucene için bir sarıcı olan ilginizi çekebilir.

Xapian insanlar da Xapian için bir önyüz Omega arama motorunu yarattı ve cgi üzerinden çağrılabilir.

Ben Tam Metin Arama ile gitmek istiyorum, buraya bakmak: http://hockinson.com/fulltext-search-of-mysql-database-table.html

Ödemek için istekli iseniz size çok bunu sorgulamak (I ücretsiz 1k sorgular / gün olsun düşünüyorum) veya yoksa Google Custom Site Search, harika.

(Daha önce belirtildiği gibi) MySQL tam metin arama da büyük bir kaynaktır.

Yahoo'nun BOSS ilginç bir projedir - benim bir sonraki arama proje sırasında denemek için gidiyorum.

Eğer tam metin daha fazla güç gerekir, ancak kendi arama motoru oynamak istiyorsanız Ve nihayet, Lucene büyük bir kaynaktır. http://lucene.apache.org

Ben birkaç gün önce Zoom Search Engine geldi ve bu şimdiye kadar kullanılan basit arama motoru olabileceğini düşünüyorum.

Windows tabanlı bir araç, sitenin bir veritabanı oluşturur sonra da (PHP, ASP.NET, JavaScript, vb), kullanmak istediğiniz dili sorar. Ben PHP aldı ve benim için PHP kodu inşa. Ben daha sonra yapmak zorunda, sunucuya dosya yüklemek ve (isteğe bağlı) şablonu ve site arama çalışıyordu özelleştirmek oldu.

Bu küçük siteler için ücretsiz, ve ben bulabilirim sadece con örümcek aracı (veritabanı üreticisi) Windows üzerinde çalıştırmak zorunda olmasıdır.