Postgresql | ||||
---|---|---|---|---|
prev | Backward nhanh | Chương 12. | Chuyển tiếp nhanh | NEXT |
Để thực hiện tìm kiếm toàn văn, phải có một chức năng đểTSVECTORTừ một tài liệu và mộttsqueryTừ truy vấn người dùng. Ngoài ra, chúng ta cầnPostgreSQLCung cấp hỗ trợ cho
PostgreSQLCung cấpTO_TSVECTOR
choTSVectorKiểu dữ liệu.
to_tsVector ([ config Regconfig, ]Document Text) trả vềtsVector
TO_TSVECTOR
Phân tích một văn kèo bóng đá c1tsVector111PostgreSQL: Tài liệu: 8.3: kèo bóng đá c1 bản45
Chọn To_TSVector ('Tiếng Anh', 'Một con mèo béo ngồi trên thảm - nó đã ăn một con chuột béo');
Trong ví dụ trên, chúng ta thấy rằng kết quảtsVectorkhông chứa các từA, trênhoặcIT, từchuộttrở thànhRATvà Dấu chấm câu-đã bị bỏ qua.
TheTO_TSVECTOR
HàmPhần) được tư vấn, trong đó danh sách có thể thay đổi tùy theoNhận dạngMã thông báo phát ra một hoặc nhiềuLexemeĐể đại diện cho12527_12533trở thànhRATVì một trong những từ điểnchuộtlà aRAT. Một số từ làDừng từ(Phần), khiến chúng bị bỏ qua vì chúng xảy raA, trên,,IT. Nếu không có từ điển trong danh sách-Bởi vì trên thực tế không có từ điểnKhông gian), nghĩa là mã thông báo không gian sẽ không bao giờ được lập chỉ mục. CácPhần 12.7). Nótiếng AnhĐối với tiếng Anh
hàmSetweight
Có thểtsVectorvới một đã choTrọng lượng, trong đó trọng lượng làA, B, ChoặcD. Điều này thường được sử dụng để đánh dấu các mục sắp tới
vìto_tsVector
(null) sẽ trả vềnull,,HOUNESCE
Bất cứ khi nào một trường có thể là null. Đây là phương pháp được đề xuấttsVectortừ một cấu trúc
Cập nhật TT SET TI =
Ở đây chúng tôi đã sử dụngSetweight
đếnTSVector, và sau đó hợp nhất được dán nhãnTSVectorGiá trị sử dụngtsVectorToán tử Concatenation||. (Phầncung cấp chi tiết về các hoạt động này.)
PostgreSQLcung cấpto_tsquery
vàPlainto_tsquery
để chuyển đổi atsqueryKiểu dữ liệu.to_tsquery
cung cấp quyền truy cập vào nhiều hơnPlainto_tsquery
,,
to_tsquery ([ config Regconfig, ]QueryText Text) trả vềtsquery
to_tsquery
Tạo AtsqueryGiá trị từQuerytext, phải bao gồm một đơn&(và),|(hoặc) và!(không). Những nhà khai thác này có thểto_tsquery
Phải theo dõitsqueryĐầu vào, nhưPhần. Sự khác biệt là trong khi cơ kèo bóng đá c1tsqueryĐầu vào lấy các mã thông báo theo mệnh giá,to_tsquery
Bình thường hóa mỗi mã thông báo
Chọn To_TSQuery ('Tiếng Anh', 'The & Fat & Rats');
như trong cơ kèo bóng đá c1tsqueryĐầu vào, Trọng lượngtsVectorLexeme của những trọng lượng đó. Vì
Chọn To_TSQuery ('Tiếng Anh', 'Chất béo | RATS: AB');
to_tsquery
cũng có thể chấp nhậnSupernovae Stars: SN:
chọn to_tsquery ('' 'Supernovae Stars' '&! Crab');
Không có báo giá,to_tsquery
Sẽ tạo lỗi cú pháp cho các mã thông báo không được phân tách
Plainto_tsquery ([ config Regconfig, ]Querytext Text) Trả vềtsquery
Plainto_tsquery
Biến đổiQuerytextđếntsquery. Văn kèo bóng đá c1 được phân tích cú pháp vàto_tsVector
, sau đó&(và) Toán tử Boolean được chèn vào giữa
Ví dụ:
Chọn Plainto_tsquery ('Tiếng Anh', 'Chuột béo');
Lưu ý rằngPlainto_tsquery
Không thể nhận ra các toán tử boolean hoặc nhãn trọng lượng trong
Chọn Plainto_tsquery ('Tiếng Anh', 'The Fat & Rats: C');
Ở đây, tất cả các dấu câu đầu vào đã bị loại bỏ là không gian
Xếp hạng cố gắng đo lường mức độPostgreSQLCung cấp hai thứ hạng được xác định trước
Hai chức năng xếp hạng hiện có là:
ts_rank ([ Trọng lượng float4 [], ]Vector tsVector, Truy vấn tsquery[, chuẩn hóa Số nguyên ]) trả vềfloat4
Hàm xếp hạng tiêu chuẩn.
TS_RANK_CD ([ Trọng lượng float4 [], ]Vector tsVector, Truy vấn tsquery[, Bình thường hóa Số nguyên ]) Trả vềfloat4
Hàm này tính toánBìaXếp hạng cho vectơ tài liệu đã cho và
Hàm này yêu cầu thông tin vị trí trong nó"Dải" tsVectorGiá trị - Nó sẽ luôn trả về 0.
Đối với cả hai chức năng này, tùy chọnTrọng lượngĐối số cung cấp khả năng
d-weight, c-weight, b-weight, a-weight
nếu khôngTrọng lượngđược cung cấp,
0.1, 0.2, 0.4, 1.0
Thông thường trọng lượng được sử dụng để đánh dấu các từ từ các khu vực đặc biệt
Vì một tài liệu dài hơn có cơ hội chứa mộtBình thường hóaTùy chọn đó|(ví dụ:2|4).
0 (mặc định) bỏ qua độ dài tài liệu
1 Chia thứ hạng cho 1 + logarit của tài liệu
2 Chia thứ hạng cho độ dài tài liệu
24538_24642TS_RANK_CD
)
8 Chia thứ hạng cho số lượng từ duy nhất trong
16 Chia thứ hạng cho 1 + logarit của số
32 chia thứ hạng cho chính nó + 1
Nếu có nhiều hơn một bit cờ được chỉ định, các phép biến đổi
Điều quan trọng cần lưu ý là các chức năng xếp hạng khôngXếp hạng/(Xếp hạng+1)) có thể được áp dụng để tỷ lệ tất cả các cấp bậc
Đây là một ví dụ chỉ chọn mười thứ hạng cao nhất
Chọn Tiêu đề, TS_RANK_CD (TextSearch, Truy vấn)
Đây là ví dụ tương tự bằng cách sử dụng xếp hạng chuẩn hóa:
Chọn Tiêu đề, TS_RANK_CD (TextSearch, Truy vấn, 32/ * Xếp hạng/(Xếp hạng+1) */)
Xếp hạng có thể tốn kém vì nó yêu cầu tư vấntsVectorcủa mỗi tài liệu phù hợp, trong đó
Để trình bày kết quả tìm kiếm, thật lý tưởng khi hiển thị một phần của mỗi phầnPostgreSQLcung cấp ats_headline
Điều đó
ts_headline ([ config Regconfig, ]Document Text, Truy vấn tsquery[, Tùy chọn Text ]) trả vềText
ts_headline
Chấp nhận một tài liệuconfig; nếu nhưconfigbị bỏ qua,default_text_search_configCấu hình là
Nếu mộtTùy chọnChuỗi làTùy chọn=giá trịcặp.
STARTSEL, Stopsel: Các chuỗi mà các từ truy vấn nào
Maxwords, Minwords: Những con số này xác định
Từ ngắn: Các từ có độ dài này
nổi bật: Cờ Boolean; nếu nhưTRUEToàn bộ tài liệu sẽ
Bất kỳ tùy chọn không xác định nào nhận được các mặc định này:
30789_30890
Ví dụ:
Chọn TS_Headline ('Tiếng Anh', 'Loại tìm kiếm phổ biến nhất
ts_headline
Sử dụng kèo bóng đá c1 gốcTSVECTORTóm tắt, vì vậy nóts_headline
choEveryKết hợpSQLSqueries có thể giúp;
Chọn ID, TS_headline (Body, Q), Xếp hạng