SIRASI ile sınırla Arama sonuçları

CONTAINSTABLE ve freetexttable işlevleri sıralı değerler 0 ile 1000 (rank değerleri) içeren SIRASI adlı bir sütun döndürür. Bu değerler, göre ne kadar iyi seçim ölçütlerine uyan döndürülen satır sıralaması için kullanılır. Rank değerleri, düşük alaka gösteren düşük değeri ile alaka sonuç kümesinde satırların yalnızca göreli sırasını gösterir. Gerçek değerleri, önemsiz ve genellikle sorguyu her çalıştırmanızda farklı.

[!NOT]

CONTAINS ve freetext yüklemler rank herhangi bir değer döndürmez.

Bir arama koşulu eşleşen öğe sayısı genellikle çok büyük. Çok fazla eşleşme dönen CONTAINSTABLE veya freetexttable sorguları önlemek için isteğe bağlı kullanın top_n_by_rankparametresi, yalnızca satırlar alt kümesini döndüren. top_n_by_rankbir tamsayı değeri, n, sadece belirtir nen yüksek sırada maçlar vardır, azalan düzende döndürülecek. Eğer top_n_by_rankbirleştirilir diğer parametrelerle sorgu, aslında tüm yüklemler eşleşen satır sayısından daha az satır geri dönebilirler.

SQL Servermaç sırası tarafından emir ve yalnızca belirli sayıda satıra kadar döndürür. Bu seçim performansını dramatik bir artışa neden olabilir. Örneğin, normalde bir milyon satır bir tablodan 100.000 satır döndürür sorgu işlenir daha hızlı yalnızca üst 100 satır istenir.

Bu Konuda

  • rank sınırla arama sonuçlarını kullanma örnekleri

  • Arama sorgusu sonuçlarını nasıl sıralanır

rank sınırla arama sonuçlarını kullanma örnekleri

Örnek a: sadece ilk üç maç için arama

Aşağıdaki örnek, yalnızca ilk üç maç dönmek CONTAINSTABLE kullanır.

USE AdventureWorks2012
GO

SELECT K.RANK, AddressLine1, City
FROM Person.Address AS A
  INNER JOIN
  CONTAINSTABLE(Person.Address, AddressLine1, 'ISABOUT ("des*",
    Rue WEIGHT(0.5),
    Bouchers WEIGHT(0.9))',
    3) AS K
  ON A.AddressID = K.[KEY]
GO

Sonuç kümesi buradadır.

RANK        Address                          City
----------- -------------------------------- ------------------------------
172         9005, rue des Bouchers           Paris
172         5, rue des Bouchers              Orleans
172         5, rue des Bouchers              Metz

(3 row(s) affected)

[YUKARI]

Örnek b: en iyi on maçları için arama

Aşağıdaki örnek CONTAINSTABLE top 5 ürün açıklaması kullanır burada Descriptionsütun "alüminyum" sözcüğünü içerir ya da kelime "ışık" ya da "basit" sözcüğü.

USE AdventureWorks2012
GO

SELECT FT_TBL.ProductDescriptionID,
   FT_TBL.Description, 
   KEY_TBL.RANK
FROM Production.ProductDescription AS FT_TBL INNER JOIN
   CONTAINSTABLE (Production.ProductDescription,
      Description, 
      '(light NEAR aluminum) OR
      (lightweight NEAR aluminum)',
      5
   ) AS KEY_TBL
   ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]
GO

[YUKARI]

Arama sorgusu sonuçlarını nasıl sıralanır

Full-text search SQL Serverbir isteğe bağlı puanı (ya da sıralama değeri) oluşturabilir bir tam metin sorgu tarafından döndürülen verileri alaka gösterir. Bu sıralama değerini her satırda hesaplanır ve ilgiye göre bir sıralama ölçütü olarak belirli bir sorgunun sonuç kümesini sıralamak için kullanılabilir. Rank değerleri alaka sonuç kümesinde satırların yalnızca göreli sırasını gösterir. Gerçek değerleri, önemsiz ve genellikle sorguyu her çalıştırmanızda farklı. Rank değerini sorgular arasında herhangi bir anlam taşımadığından.

Sıralaması istatistikleri

Dizin oluşturulduğunda, İstatistikleri sıralama kullanmak için toplanır. Tam metin katalog oluşturma işlemi, bir tek dizin yapısında doğrudan oluşmaz. Bunun yerine, tam metin alt yapısı için SQL Serververi endeksli olarak ara dizinleri oluşturur. Tam metin altyapısı, sonra gerektiği gibi büyük bir dizin bu dizinler birleştirir. Bu işlemi defalarca yinelenebilir. Tam metin altyapısı sonra "ana birleştirme" yürütmektedir. Bu tüm ara dizinler bir büyük ana dizinde birleştirir.

İstatistikleri her ara dizin düzeyinde toplanır. Dizinler birleştirildiğinde İstatistikler birleştirilir. Bazı istatistiksel değerler yalnızca ana birleştirme işlemi sırasında oluşturulabilir.

Bir sorgunun sonuç kümesi sıralamasında ise SQL Serveren büyük ara dizin istatistikleri kullanır. Bu ara dizinler veya birleştirilmiş olup olmadığı üzerinde bağlıdır. Sonuç olarak, eğer ara dizinleri değil birleştirilmiş doğruluk İstatistikleri sıralama değişebilir. Bu açıklar neden aynı sorguyu farklı sıralama sonuçları zamanla tam metin dizini oluşturulmuş veri eklendi, güncellenmiştir ve silinmiş ve küçük dizinler birleştirilmiş olarak dönebilirsiniz.

Dizin ve Hesapsal karmaşıklık boyutunu küçültmek için İstatistikler genellikle yuvarlanır.

Aşağıdaki liste sırası hesaplanmasında önemli bazı yaygın olarak kullanılan terimler ve istatistik değerler içerir.

  • Özellik
    Tam metin dizini oluşturulmuş sütun satır.

  • Belge
    Sorgularda dönen varlık. De SQL ServerBu satıra karşılık gelir. Sadece bir satır birden fazla tam metin dizini oluşturulmuş sütunlar olabilir gibi bir belge birden çok özellik olabilir.

  • Index
    Tek bir dizin bir veya daha fazla belgenin ters. Bu tamamen içinde bellek ya da disk üzerinde olabilir. Çok sayıda sorgu istatistikleri, maç oluştuğu göre bireysel dizin vardır.

  • Tam metin kataloğu
    Sorguları için bir varlık olarak ara dizinler topluluğu tedavi. Kataloglarıdır organizasyon için görünür birimi SQL Serveryönetici.

  • Word, simge veya madde
    Tam metin altyapısı eşleşen birim. Akarsu metin belgelerden sözcükleri veya simgeleri dile özgü sözcük ayırıcılar ile tokenized.

  • Oluşumu
    Sözcük ayırıcı tarafından belirlenen belge özelliği sözcüğü uzaklık. İlk kelime oluşum 1, İleri, 2 vb. dir. Yanlış pozitif ifade ve yakınlık sorguları önlemek amacıyla, cümlenin sonu ve son paragraf büyük örneği boşlukların tanıtmak.

  • TermFrequency
    Anahtar değeri bir satır numarası gerçekleşmesini.

  • IndexedRowCount
    Toplam satır sayısı endeksli. Bu, ara dizinler tutulan sayar göre hesaplanır. Bu sayı, doğruluk değişebilir.

  • KeyRowCount
    Tam metin kataloğu verilen bir anahtar içeren satır sayısı.

  • MaxOccurrence
    Özelliğe bir satır için tam metin katalog depolanan büyük olay.

  • MaxQueryRank
    En büyük rütbe, 1000, tam metin altyapısı tarafından döndürülen.

[YUKARI]

Rütbe hesaplaması sorunlar

İşlem sırası, bilgisayar bir dizi faktöre bağlıdır. Farklı dilde sözcük ayırıcılarını farklı metin tokenize. Örneğin, dize "köpek-house" "köpek" kırık "house" bir sözcük ayırıcısı ve içine "köpek-house" by another. Eşleştirme ve sıralaması değişecektir demektir, çünkü sadece kelime farklıdır, ama böylece belge uzunluğu belirtilen dile dayalı. Belge uzunluk farkı tüm sorgular için sıralama etkileyebilir.

İstatistikler gibi IndexRowCountgeniş çapta değişebilir. Örneğin, katalog 2 milyar satır ana dizinde, sonra tek bir yeni belge bellek ara dizin dizin oluşturulur ve sırada söz konusu belgenin belge bellek içi dizin sayısına etkiye sahip saflarına belgeleri ana dizinden ile karşılaştırıldığında. Bu nedenle, bu satırları çok sayıda sonuç herhangi bir nüfusa endeksli veya re-indexed sonra dizinleri alter fulltext catalog kullanarak bir ana dizin birleştirilmesi önerilir... YENİDEN Transact-SQLdeyimi. Tam metin altyapısı sayısı ve boyutu ara dizinler gibi parametrelere dayalı dizinler otomatik olarak birleştirir.

MaxOccurrence1-32 aralığı değerleri normalleştirilmiş. Buna göre Örneğin, bir belge 50 uzun kelimeleri aynı belge 100 kelime uzun olarak işlenir. Normalleştirme için kullanılan tablo aşağıdadır. Belge uzunlukları arasında bitişik tablo değerleri 32 ve 128 aralığında olduğundan, onlar etkili aynı uzunlukta, 128 sahip olarak kabul edilir (32 < docLength <= 128).

{ 16, 32, 128, 256, 512, 725, 1024, 1450, 2048, 2896, 4096, 5792, 8192, 11585, 
16384, 23170, 28000, 32768, 39554, 46340, 55938, 65536, 92681, 131072, 185363, 
262144, 370727, 524288, 741455, 1048576, 2097152, 4194304 };

[YUKARI]

CONTAINSTABLE sıralama

CONTAINSTABLE sıralaması aşağıdaki algoritmayı kullanır:

StatisticalWeight = Log2( ( 2 + IndexedRowCount ) / KeyRowCount )
Rank = min( MaxQueryRank, HitCount * 16 * StatisticalWeight / MaxOccurrence )

Tümcecik eşleşmeleri sadece bireysel tuşları gibi sırada yer dışında KeyRowCount(ifadesini içeren satır sayısı) tahmin edilmektedir ve yanlış ve gerçek sayı daha yüksek olabilir.

Sıralama, yakın

CONTAINSTABLE, iki veya daha çok arama terimi birbirine yakın seçeneğini kullanarak sorgulama destekler. Döndürülen her satır sıralaması değeri çeşitli parametrelere göre. Bir büyük sıralaması faktördür maç sayısı (ya da bulunmuş) belge uzunluğu görelidir. 100-Word belgesi ve 900-word belgesi aynı eşleşmeleri, böylece, örneğin 100-word belgesini yüksek sıralanır.

Bir satırdaki her isabet toplam uzunluğu da bu isabet ilk ve son arama koşulları arasındaki mesafe dayalı satır sıralaması katkıda bulunacak. Küçük mesafe daha vurmak satır sıralama değerine katkıda bulunmaktadır. Tam metin sorgu maksimum mesafe, yalnızca bulunmuş olan mesafeler 100 mantıksal şartlar dışında büyük içeren bir belge olarak bir tamsayı belirtmezse, 0 bir sıralama olacaktır.

ISABOUT derecelendirme

CONTAINSTABLE ağırlıklı koşulları ISABOUT seçeneğini kullanarak sorgulama destekler. ISABOUT geleneksel bilgi alma terminoloji bir vektör-alan sorgudur. Sıralama algoritması kullanılan Jaccard, yaygın olarak bilinen formül varsayılandır. Sıralama sorgu her dönem için hesaplanan ve sonra aşağıda açıklanan kombine.

ContainsRank = same formula used for CONTAINSTABLE ranking of a single term (above).
Weight = the weight specified in the query for each term. Default weight is 1.
WeightedSum = Σ[key=1 to n] ContainsRankKey * WeightKey
Rank =  ( MaxQueryRank * WeightedSum ) / ( ( Σ[key=1 to n] ContainsRankKey^2 ) 
      + ( Σ[key=1 to n] WeightKey^2 ) - ( WeightedSum ) )

[YUKARI]

freetexttable derecelendirme

freetexttable sıralaması OKAPI BM25 sıralaması formüle dayanır. freetexttable sorguları Inflectional üretimi (özgün sorgu sözcükleri Çeşitlemeli formlar); üzerinden sorgu sözcükleri ekler Bu sözler, hangi onlar oluşturulan kelime özel hiçbir ilişkisi ayrı sözcükler olarak değerlendirilir. Eş anlamlılar özelliğini oluşturulan ayrı, eşit ağırlıklı dönem kabul edilir. Sorgudaki her bir kelimenin rütbesine katkıda bulunmaktadır.

Rank = Σ[Terms in Query] w ( ( ( k1 + 1 ) tf ) / ( K + tf ) ) * ( ( k3 + 1 ) qtf / ( k3 + qtf ) ) )
Where: 
w is the Robertson-Sparck Jones weight. 
In simplified form, w is defined as: 
w = log10 ( ( ( r + 0.5 ) * ( N – R + r + 0.5 ) ) / ( ( R – r + 0.5 ) * ( n – r + 0.5 ) )
N is the number of indexed rows for the property being queried. 
n is the number of rows containing the word. 
K is ( k1 * ( ( 1 – b ) + ( b * dl / avdl ) ) ). 
dl is the property length, in word occurrences. 
avdl is the average length of the property being queried, in word occurrences. 
k1, b, and k3 are the constants 1.2, 0.75, and 8.0, respectively. 
tf is the frequency of the word in the queried property in a specific row. 
qtf is the frequency of the term in the query. 

[YUKARI]

Ayrıca bkz.

Kavramlar

Tam metin arama sorgusuyla