ไม่สามารถใช้เพรดิเคต CONTAINS หรือ FREETEXT บนตารางหรือมุมมองที่จัดทำดัชนีได้เนื่องจากไม่ได้จัดทำดัชนีข้อความแบบเต็ม


98

ฉันได้รับข้อผิดพลาดต่อไปนี้ในฐานข้อมูล SQL Server 2008 R2 ของฉัน:

ไม่สามารถใช้CONTAINSหรือFREETEXTกริยาบนโต๊ะหรือมุมมองที่จัดทำดัชนี 'tblArmy' เพราะมันไม่ได้ข้อความเต็มรูปแบบการจัดทำดัชนี


1
คุณได้สร้างแคตตาล็อกข้อความแบบเต็มจริงหรือไม่?
Alex K.

คำตอบ:


113
  1. ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งคุณลักษณะการค้นหาข้อความแบบเต็มแล้ว

    การตั้งค่าการค้นหาข้อความแบบเต็ม

  2. สร้างแคตตาล็อกการค้นหาข้อความแบบเต็ม

     use AdventureWorks
     create fulltext catalog FullTextCatalog as default
    
     select *
     from sys.fulltext_catalogs
    
  3. สร้างดัชนีการค้นหาข้อความแบบเต็ม

     create fulltext index on Production.ProductDescription(Description)
     key index PK_ProductDescription_ProductDescriptionID
    

    ก่อนที่คุณจะสร้างดัชนีโปรดตรวจสอบให้แน่ใจว่า:
    - คุณยังไม่มีดัชนีการค้นหาข้อความแบบเต็มในตารางเนื่องจากดัชนีการค้นหาข้อความแบบเต็มเพียงรายการเดียวที่อนุญาตในตารางจึง
    มีดัชนีเฉพาะอยู่ในตาราง ดัชนีต้องขึ้นอยู่กับคอลัมน์คีย์เดียวซึ่งไม่อนุญาตให้เป็น NULL
    - มีแคตตาล็อกข้อความแบบเต็ม คุณต้องระบุชื่อแค็ตตาล็อกข้อความแบบเต็มอย่างชัดเจนหากไม่มีแค็ตตาล็อกข้อความเต็มเริ่มต้น

คุณสามารถทำขั้นตอนที่ 2 และ 3 ใน SQL Sever Management Studio ใน object explorer ให้คลิกขวาที่ตารางเลือกFull-Text indexรายการเมนูจากนั้นเลือกรายการเมนูDefine Full-Text Index...ย่อย ตัวช่วยสร้างดัชนีแบบเต็มจะแนะนำคุณตลอดกระบวนการ นอกจากนี้ยังจะสร้างแคตตาล็อกการค้นหาข้อความแบบเต็มสำหรับคุณหากคุณยังไม่มี

ป้อนคำอธิบายภาพที่นี่

คุณสามารถดูข้อมูลเพิ่มเติมได้ที่MSDN


ข้อมูลดีๆอเล็กซ์! หมายเหตุ: สำหรับผู้ที่ใช้ Azure SQL จะไม่รองรับตารางที่มีอยู่ในขณะนี้ ดูที่นี่: msdn.microsoft.com/library/azure/ee336253.aspx
Termato

นอกจากนี้หากใช้ SQL Express Advanced Services โปรดดูที่นี่เพื่อสร้าง Full Text Index: stackoverflow.com/questions/10407337/…
Termato

71

วิธีแก้ปัญหาสำหรับCONTAINS: หากคุณไม่ต้องการสร้างดัชนีข้อความแบบเต็มในคอลัมน์และประสิทธิภาพไม่ใช่หนึ่งในลำดับความสำคัญของคุณคุณสามารถใช้LIKEคำสั่งที่ไม่จำเป็นต้องกำหนดค่าใด ๆ ก่อนหน้านี้:

ตัวอย่าง: ค้นหาผลิตภัณฑ์ทั้งหมดที่มีตัวอักษร Q:

SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'

1
ลิงค์ LIKE Transact-SQL เพรดิเคตทำงานกับรูปแบบอักขระเท่านั้น นอกจากนี้คุณไม่สามารถใช้เพรดิเคต LIKE เพื่อสอบถามข้อมูลไบนารีที่จัดรูปแบบ นอกจากนี้การสืบค้น LIKE เทียบกับข้อมูลข้อความที่ไม่มีโครงสร้างจำนวนมากนั้นช้ากว่าการสืบค้นแบบเต็มข้อความที่เทียบเท่ากับข้อมูลเดียวกัน
Manolis

3
อาหวาน ... วิธีง่ายๆรอบด้านที่ไม่ต้องให้คุณขุดตัวติดตั้งออกมาแล้วไปยุ่งกับการตั้งค่าสภาพแวดล้อมของคุณ ทำได้ดี!
Christine

21

คุณต้องกำหนด Full-Text-Indexตารางทั้งหมดในฐานข้อมูลที่คุณต้องการใช้แบบสอบถามCONTAINSซึ่งจะใช้เวลาสักครู่

คุณสามารถใช้ไฟล์ LIKEซึ่งจะให้ผลลัพธ์ทันทีโดยไม่จำเป็นต้องปรับการตั้งค่าใด ๆ สำหรับตาราง

ตัวอย่าง:

SELECT * FROM ChartOfAccounts WHERE AccountName LIKE '%Tax%'

ผลลัพธ์เดียวกันที่ได้รับCONTAINSสามารถรับได้ด้วยLIKE .

เห็นผล: ป้อนคำอธิบายภาพที่นี่


ฉลาดจริงๆ
WonderWorker

6
นี่เป็นเคล็ดลับที่ดี แต่วิธีที่ใช้วลีนี้ไม่ถูกต้อง อย่าเพิ่ง "ใช้" มัน มีผลกระทบด้านประสิทธิภาพที่ร้ายแรงสำหรับการทำเช่นนี้และใครก็ตามที่นำสิ่งนี้ไปใช้ในระบบการผลิตควรพิจารณาอย่างรอบคอบเกี่ยวกับการสแกนแบบเต็มตารางเช่นนี้ในคอลัมน์ที่ไม่ได้จัดทำดัชนี
Caesay

3

คุณอาจจำเป็นต้องเปิดการใช้งานโต๊ะสำหรับจัดทำดัชนีข้อความ


เปิด / ปิดการค้นหาข้อความแบบเต็มจะเป็นสีเทาในเมนูบริบท ฉันเดาว่าฉันต้องติดตั้งการค้นหาข้อความแบบเต็ม ฉันจะติดตั้งการค้นหาข้อความแบบเต็มได้อย่างไร?
DotnetSparrow

เรียกใช้การติดตั้งสำหรับ SQL Server และควรมีตัวเลือกสำหรับเปลี่ยนส่วนประกอบที่ติดตั้ง (หรือสิ่งที่คล้ายกัน) คลิกจากนั้นทำเครื่องหมายในช่องทำเครื่องหมายข้อความเต็มในเวลาที่เหมาะสมและคุณควรจะดี ขออภัยฉันไม่มีของสะดวกหรือจะให้คำแนะนำที่เฉพาะเจาะจงมากขึ้น
Tom H

@ สวัสดีทอม: ฉันไม่เห็นตัวเลือกในการเพิ่มคุณสมบัติเมื่อฉันเรียกใช้ตัวติดตั้ง SQL Server 2008 R2
DotnetSparrow

1

คุณต้องเพิ่มดัชนีแบบเต็มในช่องเฉพาะที่คุณต้องการค้นหา

ALTER TABLE news ADD FULLTEXT(headline, story);

โดยที่ "news" คือตารางและช่อง "พาดหัวเรื่องราว" ที่คุณไม่เคยเปิดใช้สำหรับการค้นหาแบบเต็มข้อความ


1

มีอีกวิธีหนึ่งในการตั้งค่าข้อความเต็มคอลัมน์เป็นจริง

ตัวอย่างเช่นวิธีแก้ปัญหาเหล่านี้ไม่ได้ผลสำหรับฉัน

ALTER TABLE news ADD FULLTEXT(headline, story);

ทางออกของฉัน

  1. คลิกขวาที่ตาราง
  2. ออกแบบ
  3. คลิกขวาที่คอลัมน์ที่คุณต้องการแก้ไข
  4. ดัชนีข้อความแบบเต็ม
  5. เพิ่ม
  6. ปิด
  7. รีเฟรช

ขั้นตอนถัดไป

  1. คลิกขวาที่ตาราง
  2. ออกแบบ
  3. คลิกคอลัมน์ที่คุณต้องการแก้ไข
  4. ที่ด้านล่างของ mssql คุณจะมีแท็บ "คุณสมบัติของคอลัมน์"
  5. ข้อกำหนดแบบเต็ม -> (เป็นดัชนีแบบเต็มข้อความ) ตั้งค่าเป็นจริง

รีเฟรช

เวอร์ชันของ mssql 2014


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.