Diğer

SQL Server full-text search: bir stop word aramamızı bozduğunda

SQL Server üzerindeki bir full-text arama geçerli sorgularda sonuç vermemeye başladı; neden, İngilizce stoplist'te bulunduğu için index'e hiç girmeyen 'both' kelimesiydi. Yazar, sys.dm_fts_parser ile Noise Word'ün nasıl görünür olduğunu ve stoplist'i tamamen kapatmadan önce değerlendirdikleri dört seçeneği anlatıyor.

Yayın tarihi
Okuma süresi
4 dk okuma
agent çalıştırması #23
agent çalıştırması #23
Orijinale git bartwullems.blogspot.com

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • İngilizce sistem stoplist'inde bulunan bir stop word full-text index'e hiç eklenmez, dolayısıyla hiçbir şeyle eşleşemez.
  • Boolean CONTAINS sorgusunda eksik stop word, SQL Server'ın kalan terimleri değerlendirmesi yerine sıfır satır döndürmesine yol açar.
  • sys.fulltext_system_stopwords ve sys.dm_fts_parser bunu ortaya çıkarır: kelime Noise Word olarak raporlanır.
  • Buradaki çözüm, her kelimeyi indeksleyen ALTER FULLTEXT INDEX ... SET STOPLIST = OFF oldu.
  • Yalnızca birkaç kelime sorun çıkarıyorsa FROM SYSTEM STOPLIST ile oluşturulup DROP ile daraltılan özel bir stoplist daha ucuz seçenek.
  • Yeniden doldurmayı FULLTEXTCATALOGPROPERTY(..., 'PopulateStatus') ile izleyin, kelimeyi sys.dm_fts_index_keywords ile doğrulayın.

SQL Server Full-Text Search üzerine kurulu bir arama, daha önce çalışan sorgularda aniden sıfır satır döndürmeye başladı; suçlu tek bir kelimeydi: "both". 'both' İngilizce sistem stoplist'inde yer aldığı için full-text index'e hiç yazılmıyor ve CONTAINS içinde boolean operatörler varken SQL Server eksik terimi sessizce atlamıyor; koşulun tamamını başarısız sayıp boş sonuç veriyor.

Ekip bunu sys.fulltext_system_stopwords ve sys.dm_fts_parser ile teşhis etti; parser çıktısında kelime Noise Word olarak işaretleniyor. Ardından index'i STOPLIST = OFF ile yeniden yapılandırdılar, yani artık her kelime indeksleniyor ve aranabiliyor. Bedeli var: daha büyük index, daha uzun population süresi ve neredeyse her satırla eşleşen kelimeler. Yalnızca birkaç kelime sorun çıkarıyorsa sistem stoplist'inden türetilmiş özel bir stoplist daha dar bir çözüm.

Gerçek dünyada kullanımı

  • Kullanıcıların tek arama kutusunda birden çok kelime yazdığı ve hepsinin dikkate alınmasını beklediği bir ürün kataloğu.
  • SQL Server üzerindeki bir doküman arşivinde, çok terimli sorgudaki bir stop word'ün sessizce boş sonuç sayfası döndürdüğü durum.
  • Kodda sabit bir kelime listesi yerine dil başına tek bir indexleme kararı gereken çok dilli bir uygulama.

Neden önemli

Aramanız CONTAINS kullanıyorsa ve kullanıcılar birden çok kelimeyi birlikte yazıyorsa, tek bir yaygın kelime boş sayfa döndürüp veri hatası gibi görünebilir; parser'ı ve stoplist'i bilmek tahmin etmeyi bitirir.

Bu özet, Bart Wullems (The Art of Simplicity) üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü