Postgresql 9.3.25 Tài liệu | ||||
---|---|---|---|---|
prev | UP | Chương 12. Đầy đủ | 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
để chuyển đổi atsVectorKiể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 tỷ số bóng đá euro hôm naytsVectortrong đó liệt kê các từ vựng lại với nhau
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 thuộc vàoNhận dạngMã thông báo phát ra một hoặc nhiều bình thườngLexemeĐể biểu diễn mã thông báo. Vìchuộttrở thànhRATBởi vì một trong những từ điển đã nhận ra rằngchuộtlà một dạng số nhiều củaRAT. Một số từ được công nhận làDừng từ(Phần), khiến chúng bị bỏ qua vì chúng cũng xảy raA, trênvàIT. Nếu không có từ điển trong danh sách-VìBiểu tượng không gian), nghĩa là các mã thông báo không gian sẽPhần). Có thể có nhiều cấu hình khác nhau trongTiếng AnhĐối với ngôn ngữ tiếng Anh.
hàmSetweight
có thể được sử dụngTSVECTORvới aTrọng lượng, trong đó trọng lượng là một trong nhữngA, B,
ChoặcD. Đây là
vìto_tsVector
(null) sẽ trả vềnull, NóHOUNESCE
Bất cứ khi nào một trường có thể là NULL. Đây là phương pháp được đề xuất choTSVECTORtừ 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 truy vấn sangtsqueryKiểu dữ liệu.to_tsquery
cung cấp quyền truy cập vào nhiều tính năng hơnPlainto_tsquery
, nhưng ít hơn
to_tsquery ([ config Regconfig, ]Querytext Text) Trả vềtsquery
to_tsquery
Tạo AtsqueryGiá trị từQuerytext, phải bao gồm đơn&(và),|(hoặc) và!(không). Các nhà khai thác này có thể được nhómto_tsquery
Phải tuân theo các quy tắc chungtsqueryĐầu vào, như được mô tả trongPhần 8.11. Sự khác biệt làtsqueryĐầu vào lấy các mã thông báo tạito_tsquery
Bình thường hóa
Chọn To_TSQuery ('Tiếng Anh', 'The & Fat & Rats');
như trong cơ kèo tỷ số bóng đá euro hôm naytsqueryĐầu vào, trọng lượng có thểtsVectorLexeme của những trọng lượng đó. Ví dụ:
Chọn to_tsquery ('English', 'Fat | Rats: AB');
Ngoài ra,*có thể được gắn vào từ vựng để
Chọn To_TSQuery ('Supern:*A & Star: A*B');
Một từ vựng như vậy sẽ phù hợp với bất kỳ từ nào trong mộttsVectorBắt đầu bằng chuỗi đã cho.
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
Will
Plainto_tsquery ([ config Regconfig, ]Querytext Text) trả vềtsquery
Plainto_tsquery
Biến đổiQueryTextđếntsquery. Văn kèo tỷ số bóng đá euro hôm nay được phân tích cú pháp và chuẩn hóaTO_TSVECTOR
, sau đó&(và) Toán tử Boolean được chèn
Ví dụ:
Chọn Plainto_tsquery ('Tiếng Anh', 'Chuột béo');
Lưu ý rằngPlainto_tsquery
Không thể
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à:
Xếp hạng vectơ dựa trên tần suất phù hợp của chúng
Hàm này tính toánBìaXếp hạng cho vectơ và truy vấn tài liệu đã cho, như
Hàm này yêu cầu thông tin vị trí trong đầu vào của nó."Dải" tsVectorGiá trị - Nó sẽ luôn quay lại
Đố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 cân nặng
d-weight, c-weight, b-weight, a-weight
nếu khôngTrọng lượngđược cung cấp, sau đó
0.1, 0.2, 0.4, 1.0
Thông thường các trọng số được sử dụng để đánh dấu các từ từ các khu vực đặc biệt của
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 chỉ định xem có|(cho2|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
4 Chia thứ hạng cho khoảng cách hài hòa trung bình giữa các phạm viTS_RANK_CD
)
8 Chia thứ hạng cho số lượng từ duy nhất trong tài liệu
16 Chia thứ hạng cho 1 + logarit của số lượng duy nhất
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 là
Điều quan trọng cần lưu ý là các chức năng xếp hạng không sử dụngXếp hạng/(Xếp hạng+1)) có thể được áp dụng
Đây là một ví dụ chỉ chọn mười thứ hạng cao nhất
Chọn thứ hạng, TS_RANK_CD (TextSearch, Truy vấn) làm cấp bậc
Đây là ví dụ tương tự bằng cách sử dụng xếp hạng chuẩn hóa:
Chọn thứ hạng, 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, có thể
Để trình bày kết quả tìm kiếm, rất lý tưởng để hiển thị một phần của mỗi phầnPostgreSQLcung cấp chức năngts_headline
Đó là thực hiện điều này
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ưconfigđược 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. Các
startsel, stopsel: Các chuỗi để phân định truy vấn
Maxwords, minwords: Những con số này xác định dài nhất và
SHORTWORD: Các từ có độ dài này hoặc ít hơn
Điểm nổi bật: Cờ Boolean; nếu nhưTRUEToàn bộ tài liệu sẽ được sử dụng làm
MaxFragments: Số lượng văn kèo tỷ số bóng đá euro hôm nay tối đaMaxwordsvà các từ có độ dàiTừ ngắnhoặc ít hơn bị loại bỏ khi bắt đầu và kết thúcminwordsTrong tài liệu sẽ được hiển thị.
FragmentDelImiter: khi nhiều hơn một
Bất kỳ tùy chọn không xác định nào cũng nhận được các mặc định này:
startsel = <b, stopsel = </b,
Ví dụ:
Chọn TS_HEADLINE ('Tiếng Anh',
ts_headline
Sử dụng kèo tỷ số bóng đá euro hôm nay gốcTSVECTORTóm tắt, vì vậy nó có thểts_headline
chomỗiTài liệu phù hợp khi chỉ có mườiSQLSqueries có thể giúp; Đây là một ví dụ:
Chọn ID, TS_headline (Body, Q), Xếp hạng