2011-01-18 15 views
6

SQL Server Tam Metin Arama'da yeniyim ve arama motorunun kullanımıyla çok yönlü motor kullanarak arama yapmanın en iyi yolunu bulmaya çalışıyorum tüm kelimelerin çeşitli şekilleri.SQL Server Tam Metin Birden fazla arama kelimesi için CONTAINS, FORMSOF, NEAR kullanarak arama

Ne okuduğumdan, FREETEXT birden fazla sözcükle kullanıldığında örtük bir OR kullanır. Bir AND istiyorum, böylece arama sonuçları tüm kelimeleri içerdiğinden, bu yüzden CONTAINS kullanmayı tercih ediyorum.

Birden çok sözcük için NEAR yakınlık anahtar kelimesi ile FORMSOF kullanan aşağıdaki sorgu gibi bir şey yapmaya çalışıyorum. Bu geçerli sözdizimi değildir ve hata verir unutmayın: çalışmaların altına

select top 5 * 
from content 
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, model NEAR airplane)') 

Ancak sorguyu, ancak amaçlanan sonuçları vermesi durumunda bilmiyorum. SQL Tam Metin Arama ile "AND" ve "NEAR" arasında bir fark var mı?

select top 5 * 
from content 
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, model) AND FORMSOF(INFLECTIONAL, airplane)') 

Ben is soruyorum, ne kullanmak için bir yol yoktur İÇEREN, FORMSOF ve YAKIN Birden çok arama sözlerle tahmin? Ya da "AND" kullanan yukarıdaki ikinci sorguyu kullanmalı mıyım? Dokümanlar

cevap

9

:

<proximity_term> ::= 
    { <simple_term> | <prefix_term> } 
    { { NEAR | ~ } 
    { <simple_term> | <prefix_term> } 
    } [ ...n ] 

Bu (mümkünse öneki) kelimeler, cümleler ve bunların kombinasyonları için NEAR yüklemi kullanabileceğiniz anlamına gelir.

arama terimleri oldukça basit kurallarını kullanarak çekimli olduğundan, sadece kullanabilirsiniz ön ekleri:

SELECT * 
FROM content 
WHERE CONTAINS((Title,Subtitle,Body), 'model* NEAR airplane*') 

veya AND kullanabilir ve istemci tarafında ince filtreleme yapmak

SELECT * 
FROM ft 
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, "model") AND FORMSOF(INFLECTIONAL, "airplane")') 
İlgili konular