Không thể sử dụng vị từ CONTAINS hoặc FREETEXT trên bảng hoặc chế độ xem được lập chỉ mục vì nó không được lập chỉ mục toàn văn bản


95

Tôi gặp lỗi sau trong cơ sở dữ liệu SQL server 2008 R2 của mình:

Không thể sử dụng một CONTAINShoặc FREETEXTvị từ trên bảng hoặc chế độ xem được lập chỉ mục 'tblArmy' vì nó không được lập chỉ mục toàn văn.


1
Bạn đã thực sự tạo một danh mục văn bản đầy đủ chưa?
Alex K.

Câu trả lời:


111
  1. Đảm bảo rằng bạn đã cài đặt tính năng tìm kiếm toàn văn bản.

    Thiết lập Tìm kiếm Toàn văn

  2. Tạo danh mục tìm kiếm toàn văn bản.

     use AdventureWorks
     create fulltext catalog FullTextCatalog as default
    
     select *
     from sys.fulltext_catalogs
  3. Tạo chỉ mục tìm kiếm toàn văn bản.

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

    Trước khi bạn tạo chỉ mục, hãy đảm bảo:
    - bạn chưa có chỉ mục tìm kiếm toàn văn trên bảng vì chỉ một chỉ mục tìm kiếm toàn văn được phép trên bảng
    - chỉ mục duy nhất tồn tại trên bảng. Chỉ mục phải dựa trên cột một khóa, không cho phép NULL.
    - danh mục toàn văn tồn tại. Bạn phải chỉ định tên danh mục toàn văn một cách rõ ràng nếu không có danh mục toàn văn mặc định.

Bạn có thể thực hiện bước 2 và 3 trong SQL Sever Management Studio. Trong trình khám phá đối tượng, nhấp chuột phải vào bảng, chọn Full-Text indexmục menu và sau đó chọn mục menu Define Full-Text Index...phụ. Trình hướng dẫn lập chỉ mục toàn văn bản sẽ hướng dẫn bạn trong suốt quá trình. Nó cũng sẽ tạo một danh mục tìm kiếm toàn văn cho bạn nếu bạn chưa có.

nhập mô tả hình ảnh ở đây

Bạn có thể tìm thêm thông tin tại MSDN


Thông tin tốt Alex! LƯU Ý: đối với những người sử dụng Azure SQL, nó không hỗ trợ Bảng chứa kể từ bây giờ. Xem ở đây: msdn.microsoft.com/library/azure/ee336253.aspx
Termato

Ngoài ra, nếu sử dụng Dịch vụ nâng cao của SQL Express, hãy xem tại đây để tạo Chỉ mục văn bản đầy đủ: stackoverflow.com/questions/10407337/…
Termato

69

Một giải pháp cho CONTAINS: Nếu bạn không muốn tạo Chỉ mục toàn văn trên cột và hiệu suất không phải là một trong những ưu tiên của bạn, bạn có thể sử dụng LIKEcâu lệnh không cần bất kỳ cấu hình trước nào:

Ví dụ: tìm tất cả các Sản phẩm có chứa chữ Q:

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

1
liên kết . Vị từ LIKE Transact-SQL chỉ hoạt động trên các mẫu ký tự. Ngoài ra, bạn không thể sử dụng vị từ LIKE để truy vấn dữ liệu nhị phân được định dạng. Hơn nữa, một truy vấn LIKE đối với một lượng lớn dữ liệu văn bản không có cấu trúc chậm hơn nhiều so với một truy vấn toàn văn tương đương với cùng một dữ liệu.
Manolis

1
À, ngọt ngào ... một cách dễ dàng, đơn giản mà không yêu cầu bạn phải tìm ra trình cài đặt của mình và xoay quanh các cài đặt môi trường của bạn. Làm tốt!
Christine

21

Bạn phải xác định Full-Text-Indextrên tất cả các bảng trong cơ sở dữ liệu nơi bạn yêu cầu sử dụng truy vấn CONTAINSmà sẽ mất một lúc.

Thay vào đó, bạn có thể sử dụng LIKEcái sẽ cho bạn kết quả tức thì mà không cần điều chỉnh bất kỳ cài đặt nào cho bảng.

Thí dụ:

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

Kết quả tương tự thu được với CONTAINScó thể thu được với LIKE.

xem kết quả: nhập mô tả hình ảnh ở đây


Điều đó thực sự thông minh
WonderWorker

6
Đây là một thủ thuật hay, nhưng cách diễn đạt câu trả lời này là sai. Đừng "chỉ sử dụng" nó. Có một số tác động nghiêm trọng về hiệu suất khi thực hiện điều này và bất kỳ ai đưa điều này vào hệ thống sản xuất nên suy nghĩ rất kỹ về việc quét toàn bộ bảng như thế này trên một cột không được lập chỉ mục.
caesay

3

bật / tắt Tìm kiếm toàn văn được chuyển sang màu xám trong menu ngữ cảnh. Tôi đoán tôi cần cài đặt Tìm kiếm toàn văn. Làm cách nào để cài đặt tìm kiếm toàn văn?
DotnetSparrow

Chạy cài đặt cho SQL Server và sẽ có một tùy chọn để thay đổi các thành phần đã cài đặt (hoặc một cái gì đó tương tự). Nhấp vào đó rồi đánh dấu vào hộp kiểm Toàn văn vào thời điểm thích hợp và bạn sẽ tốt. Xin lỗi, tôi không có một cái tiện dụng hoặc tôi sẽ hướng dẫn cụ thể hơn.
Tom H

@Hi Tom: Tôi không thấy tùy chọn thêm tính năng khi chạy trình cài đặt SQL server 2008 R2.
DotnetSparrow

1

bạn phải thêm chỉ mục văn bản đầy đủ trên các trường cụ thể mà bạn muốn tìm kiếm.

ALTER TABLE news ADD FULLTEXT(headline, story);

trong đó "tin tức" là bảng của bạn và các trường "tiêu đề, tin bài" mà bạn không muốn bật cho tìm kiếm toàn văn


1

Có một giải pháp nữa để đặt Toàn văn cột thành true.

Ví dụ, giải pháp này không hoạt động với tôi

ALTER TABLE news ADD FULLTEXT(headline, story);

Giải pháp của tôi.

  1. Nhấp chuột phải vào bảng
  2. Thiết kế
  3. Nhấp chuột phải vào cột mà bạn muốn chỉnh sửa
  4. Chỉ mục toàn văn
  5. Thêm vào
  6. Đóng
  7. Làm tươi

BƯỚC TIẾP THEO

  1. Nhấp chuột phải vào bảng
  2. Thiết kế
  3. Nhấp vào cột mà bạn muốn chỉnh sửa
  4. Ở cuối mssql, bạn sẽ có tab "Thuộc tính cột"
  5. Đặc tả toàn văn bản -> (Được lập chỉ mục toàn văn bản) được đặt thành true.

Làm tươi

Phiên bản mssql 2014


-1
Select * from table
where CONTAINS([Column], '"A00*"')  

sẽ hoạt động như% giống như

where [Column] Like 'A00%'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.