سؤال

لدي فهرس النص الكامل تم إنشاؤه على عمود من النوع Varchar (Max) مع تمكين Filestream. يحتوي FileStream على بيانات مثل JPG و TIF و PDF و XML (على الرغم من أن هذا غير ذي صلة بالسؤال ، على ما أعتقد).

لديّ استفسارين قمت بإنشائه يسمحان لي بالبحث على الفهرس.

بحث النص الكامل رقم 1--

select
      parentObj.ObjectID as 'GroupingID',
      parentObj.Name as 'Grouping',
      childObj.ObjectID as 'FileObjID', 
      childObj.Name as 'FileName',
      fs.FileStreamID
    from dbo.dat_FileStream fs
    inner join dbo.dat_Object childObj
        on fs.ObjectID = childObj.ObjectID
    inner join dbo.dat_Collection c
        on fs.ObjectID = c.ObjectID
    inner join dbo.dat_Object parentObj
        on c.ParentID = parentObj.ObjectID
    where contains(FileStreamData, @srchTerm)
        and parentObj.ObjectTypeID = 1
    ORDER BY 'Grouping'

بحث النص الكامل رقم 2-

select
      KEY_TBL.RANK,
      parentObj.ObjectID as 'GroupingID',
      parentObj.Name as 'Grouping',
      childObj.ObjectID as 'FileObjID',
      childObj.Name as 'FileName',
      fs.FileStreamID
    from dbo.dat_FileStream fs
    inner join containstable(dbo.dat_FileStream, FileStreamData, @srchTerm, 1000) as KEY_TBL
        on fs.FileStreamID = KEY_TBL.[KEY]
    inner join dbo.dat_Object childObj
        on fs.ObjectID = childObj.ObjectID
    inner join dbo.dat_Collection c
        on fs.ObjectID = c.ObjectID
    inner join dbo.dat_Object parentObj
        on c.ParentID = parentObj.ObjectID
    where parentObj.ObjectTypeID = 1
    ORDER BY 'Grouping'

الفرق الهام الوحيد بين عمليات البحث عن النص الكامل هو استخدام الاستعلام رقم 1 ويستخدم الاستعلام رقم 2 احتواء.

مشكلتي هي أن الاستعلامات لا تسفر دائمًا عن نفس النتائج. على سبيل المثال ، لو كنت أبحث في عبارة "المقاولين المستقلين" ، فإن الاستعلام رقم 1 سيؤدي إلى مجموعة من 10 مستندات مختلفة (PDF's و XML's) ، في حين أن الاستعلام رقم 2 سيؤدي فقط إلى مجموعة من النتائج 6. يبدو أن هذا هو القاعدة: يسفر الاستعلام رقم 1 دائمًا أكثر من الاستعلام رقم 2 ، والاستعلام رقم 2 يعطي دائمًا نفس المطابقات التي يقوم بها الاستعلام رقم 1.

الاستعلام رقم 1 - البحث عن "المقاولين المستقلين":

4262    AAA-00-12   4561    AAA-00-12.pdf   4235
4316    AAA-00-15   4753    AAA-00-15.pdf   4427
4316    AAA-00-15   4754    AAA-00-15.xml   4428
3873    AAA-00-19   4784    AAA-00-19.pdf   4458
3903    AAA-00-22   6795    AAA-00-22.pdf   6459
3953    AAA-00-24   6899    AAA-00-24.pdf   6563
3953    AAA-00-24   6900    AAA-00-24.xml   6564
4842    AAA-00-9    4905    AAA-00-9.pdf    4577
4842    AAA-00-9    4906    AAA-00-9.xml    4578
4057    AAA-0001    4260    AAA-0001.pdf    3936

الاستعلام رقم 2 - البحث عن "المقاولين المستقلين":

19  4262    AAA-00-12   4561    AAA-00-12.pdf   4235
126 4316    AAA-00-15   4754    AAA-00-15.xml   4428
126 4316    AAA-00-15   4753    AAA-00-15.pdf   4427
116 3873    AAA-00-19   4784    AAA-00-19.pdf   4458
125 3903    AAA-00-22   6795    AAA-00-22.pdf   6459
57  3953    AAA-00-24   6900    AAA-00-24.xml   6564
57  3953    AAA-00-24   6899    AAA-00-24.pdf   6563
هل كانت مفيدة؟

المحلول

CONTAINSTABLE:

top_n_by_rank

يحدد أنه يتم إرجاع فقط مباريات NHIGHT المرتبة ، بترتيب تنازلي. ينطبق فقط عندما يتم تحديد قيمة عدد صحيح ، n. إذا تم الجمع بين TOP_N_BY_RANK مع معلمات أخرى ، يمكن أن يعيد الاستعلام صفوفًا أقل من عدد الصفوف التي تتطابق فعليًا مع جميع المتنبئين.

حاول تشغيل W/OA TOP ومعرفة ما إذا كان يتطابق CONTAINS.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top