2016-03-28 21 views
0

MySQL'de sonuçların indeksinin olası olup olmadığını merak ediyorum. Örneğin, bir kelime veya birden çok kelime olabilecek bir arama terimi kullanıyorum. Örneğin için. "ev" veya "yüksek deniz evi". Şimdi, MySQL'in "yüksek deniz evinin" bir sorguya 3 kez sığmasını indeksleyip merak etmediğini merak ediyorum.Çoklu kelime arama sonuçları MySQL içinde

böyle bir şey düşünüyorum: böylece

select `fields` from `table` where 
    `searchfield` like 'high' or 
    `searchfield` like 'sea' or 
    `searchfield` like 'house' or 

ve - ben arama sürecinde nasıl kullandıklarını birçoğu bağlı.

  1. Ben kaç kelime sığacak bir değerlendirmesini yapmak gerekir ben endeksli ilk
  2. arama terimden tüm sözcükleri içeren kayıtları gerekir: şöyle

    Şimdi arama işlemine sıralamak gerekir arama terimimin her kelimesini aradım.

Herhangi bir fikir?

Çok teşekkürler! olarak boolean değerlendirmeler ya Yani örneğin eğer 1 veya 0 döndürür Çalışıyor

SELECT `fields` FROM `table`, (`searchfield` LIKE '%high%') + 
(`searchfield` LIKE '%sea%') + (`searchfield` LIKE '%house%') AS hits 
HAVING hits > 0 
ORDER BY hits DESC 

:

SELECT `fields` FROM `table`, (`searchfield` LIKE '%high%') + 
(`searchfield` LIKE '%sea%') + (`searchfield` LIKE '%house%') AS hits 
WHERE `searchfield` LIKE '%high%' OR 
`searchfield` LIKE '%sea%' OR 
`searchfield` LIKE '%house%' 
ORDER BY hits DESC 

Veya sadece:

+2

tam metin aramasını istiyorsanız: http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html –

+0

tam metin arama dizini ile elde edebilirsiniz ... ya da sadece ya tarafından desteklenen tam metin dizini myisam motoru 5.5 sürümüne kadar ve avaibale innodb motoru da mysql 5.6 sürümünden itibaren .... 5.6 veya daha yüksek bir sürüm veya myisam motoru kullanıyorsanız @Dagon tarafından sağlanan belgelerini kontrol edin. –

+0

http: // use- the-index-luke.com/sql/where-clause/searching-for-ranges/like-performance-tuning Bu, sorunuza cevap verebilir – Naruto

cevap

0

Aşağıdaki sorguyu kullanabilirsiniz yüksek ve deniz, searchfieldhits'un bir parçası olacaktır 1 + 1 + 0 = 2 olacaktır. Satırlar daha sonra azalan sırada sıralanır, böylece satırları önce en çok isabetle alırsınız. Şimdi

Sana searchfield saklamak bilmiyorum ama boşluk ile ayrılmış kelimesi varsa, siz de boşluk ile arama kelimeleri köşeli olabilir (örn '% sea %') böylece denizatı bir maç almazsınız. Bu, searchfield'daki ilk ve son sözcüklerle ilgili bir sorun olsa da, hem önce hem de sonra boşlukları yoksa.

İlgili konular