2010-09-05 38 views
19

Khi trạng thái tiêu đề, chỉ mục toàn văn là gì và khi nào tôi nên sử dụng nó?Chỉ mục toàn văn là gì và khi nào tôi nên sử dụng nó?

+1

Vui lòng lặp lại câu hỏi của bạn. Bạn muốn biết gì? Bạn có ý gì khi "khi nào sử dụng chỉ mục toàn văn" - ngoài câu trả lời rõ ràng "khi bạn dự định thực hiện tìm kiếm toàn văn"? –

Trả lời

13

Trong chỉ mục cơ sở dữ liệu thường được sử dụng để nâng cao hiệu suất khi tìm kiếm điều gì đó được xác định trong mệnh đề where của bạn. Tuy nhiên, khi nói đến lọc một số văn bản, ví dụ: bằng cách sử dụng một cái gì đó như WHERE TextColumn LIKE '%searchstring%' thì tìm kiếm chậm, bởi vì cách thức các chỉ mục cơ sở dữ liệu thông thường hoạt động được tối ưu hóa cho các kết quả khớp với 'toàn bộ nội dung' của một cột và không chỉ là một phần của nó. Cụ thể, tìm kiếm LIKE bao gồm các ký tự đại diện không thể sử dụng bất kỳ loại chỉ mục nào.

Như đã đề cập trong nhận xét bên dưới, MySQL cần cú pháp MATCH() ... AGAINST để tìm kiếm trong chỉ mục toàn văn; BTW tùy thuộc vào nhà cung cấp cơ sở dữ liệu. Trong MS SQL, bạn có thể sử dụng CONTAINS để ghi nhớ điều này khi bạn có kế hoạch hỗ trợ các cơ sở dữ liệu khác.

Chỉ mục toàn văn hoạt động tốt hơn cho văn bản thông thường, vì chúng được tối ưu hóa cho các loại cột này. Rất đơn giản: Họ chia văn bản thành các từ và tạo chỉ mục trên các từ chứ không phải toàn bộ văn bản. Điều này hoạt động nhanh hơn rất nhiều cho tìm kiếm văn bản khi tìm kiếm các từ cụ thể.

+6

Chỉ mục FULLTEXT sẽ không làm gì cho mệnh đề LIKE - chúng sẽ chỉ được sử dụng cho các mệnh đề 'MATCH() ... AGAINST'. Các mệnh đề tương tự bắt đầu bằng ký tự đại diện '%' không thể được tăng tốc hiệu quả bởi bất kỳ loại chỉ mục * nào và sẽ luôn luôn chậm. Vì lý do này loại mệnh đề LIKE nên tránh trừ khi lọc một số lượng nhỏ các bản ghi. – thomasrutter

+2

Vì vậy, nói cách khác, nếu bạn _are_ tìm kiếm một kết hợp chính xác với toàn bộ chuỗi, chỉ mục FULLTEXT là điều sai để sử dụng? – aroth

+1

@aroth khi tìm kiếm trên toàn bộ nội dung của cột, chỉ mục toàn văn sẽ không có lợi chút nào. – Alex

10

Chỉ mục văn bản đầy đủ là chỉ mục bạn áp dụng trong cơ sở dữ liệu MySQL cho các trường văn bản mà bạn định chạy tìm kiếm toàn văn. Tìm kiếm toàn văn sử dụng cú pháp match(field) against('text'). Nếu bạn muốn chạy tìm kiếm toàn văn, bạn phải có chỉ mục văn bản đầy đủ trên các cột bạn sẽ chạy nó.

Có ba loại tìm kiếm Toàn văn. Tôi sẽ báo giá hướng dẫn, bởi vì tôi nghĩ rằng nó nói nó tốt nhất:

  • Một tìm kiếm boolean giải thích chuỗi tìm kiếm bằng cách sử dụng quy tắc của một ngôn ngữ truy vấn đặc biệt . Chuỗi chứa các từ để tìm kiếm. Nó cũng có thể chứa các toán tử chỉ định các yêu cầu sao cho một từ phải có hoặc không có trong kết hợp hàng hoặc phải là trọng số cao hơn hoặc thấp hơn bình thường. Các từ phổ biến chẳng hạn như “một số” hoặc “sau đó” là các từ dừng và không khớp với nhau nếu hiện tại trong chuỗi tìm kiếm. IN BOOLEAN Công cụ sửa đổi MODE chỉ định một tìm kiếm boolean . Để biết thêm thông tin, hãy xem Mục 11.9.2, “Toàn văn Boolean Tìm kiếm”.

  • Tìm kiếm ngôn ngữ tự nhiên diễn giải chuỗi tìm kiếm dưới dạng một cụm từ tự nhiên của con người ( cụm từ trong văn bản tự do). Không có toán tử đặc biệt nào. Danh sách từ dừng sẽ được áp dụng. Ngoài ra, các từ là có mặt trong 50% hoặc nhiều hơn các hàng là được coi là phổ biến và không khớp. Tìm kiếm toàn văn là tự nhiên tìm kiếm ngôn ngữ nếu không có công cụ sửa đổi nào là được cung cấp.

  • Tìm kiếm mở rộng truy vấn là sửa đổi ngôn ngữ tự nhiên tìm kiếm. Chuỗi tìm kiếm được sử dụng để thực hiện tìm kiếm ngôn ngữ tự nhiên. Sau đó, các từ từ các hàng có liên quan nhất được trả về bởi tìm kiếm được thêm vào chuỗi tìm kiếm và tìm kiếm được thực hiện lại một lần nữa là . Truy vấn trả về các hàng từ tìm kiếm thứ hai. WITH QUERY Công cụ sửa đổi mở rộng chỉ định truy vấn tìm kiếm mở rộng . Để biết thêm thông tin , xem Phần 11.9.3, “Tìm kiếm toàn văn bản với truy vấn Mở rộng”.

Để biết thêm thông tin tham gia một ngây ngô tại Full Text Search Reference Page.

Các vấn đề liên quan