FULLTEXT, çözüm gerekiyor, herhangi bir fikir yeterli alışkanlık arıyorsunuz?

7 Cevap php

Benim sunucu alışkanlık bir arama dizesi 4 daha az karakterden izin çünkü ben şu anda tüm sözcükleri aramak için FULLTEXT indeksleri kullanamazsınız.

Ben Sizden sonra bir çözüm gerekiyor.

Ben 'bmw 330' girin ve ardından 'bmw 330' gibi bütün maçları ile mysql sonuçları elde edebilmek istiyorum.

Bunun için bir üçüncü taraf arama motoru düşünmeliyim?

PHP bunu nasıl yapabilirim?

Teşekkürler

7 Cevap

Eğer tam olarak eşleşmesini istiyorsanız, o zaman istediğiniz

SELECT * FROM table WHERE text_column = 'bmw 330'

.

Sen Zend Lucene gibi bir şey kullanabilirsiniz. Eğer herhangi bir şey yüklemeniz gerekmez böylece PHP ile yazılmış.

Peki böyle SQL yazarsanız:

SELECT * FROM table WHERE text_column LIKE '%bmw 330%'

?

Sen bu yüzden onun yapılandırmasına doğrudan erişim var sanırım "benim sunucu" deyin:

Sadece kendi ihtiyaçlarına uygun (my.cnf) aşağıdaki satırı değiştirin, MySQL bir FULLTEXT arama için gerekli min karakteri değiştirebilirsiniz:

[mysqld]
ft_min_word_len=3

Best wishes,
Fabian

Sütun LIKE '% bmw 330%' SELECT * FROM tablo?

Tamam, şimdi burada bir dizi öneri var. En iyi yolu kesinlikle Lucene gibi özel bir arama motoru kullanıyor.

Eğer Lucene gibi bir şey kullanabilirsiniz yapamıyorsanız, ben bir massively hacky çözüm için bir fikrim var.

  • Lütfen tabloda ikinci bir metin alanı oluşturma
  • Whenever your text field is updated, write a copy of it into the second text field. Use a regex to find words less than 4 characters long and add a pre-defined string to every occurrence: bmw => bmwABCDEF
  • Gelen her bir arama sorgusu için, her kelimenin dize eklemek için aynı regex kullanmak < 4 karakter. bmw 300 sonra olmak bmwABCDEF 300ABCDEF ve buna göre uyumlu olacak.

Bu çok hacky bulunuyor ve olası yan etkileri ile atlatmamı gerekiyor, ama hiçbir şey daha iyi çalışabilir.

Nasıl hakkında

SELECT * FROM table WHERE text_column LIKE '% bmw 330 %'

(Sonra önce% boşluk dikkat edin)

?

Bazı sınırlamalar: Bu tam kelimeleri bulabilirsiniz, ama bulamazsınız

bmw 330(mint condition)
SPECIAL OFFER!!!!!bmw 330