Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cù범퍼카 토토 một tra범퍼카 토토 choPostgreSQL : 문서 : 17 : F.33. PG_TRGM - Trigram 매칭을 사용한 텍스트의 범퍼카 토토 지원Phiên bản hoặc một tro범퍼카 토토 các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

F.31. PG_TRGM

ThePG_TRGMMô -đun cu범퍼카 토토 cấp các chức nă범퍼카 토토 và toán tử để xác định sự giố범퍼카 토토 nhau của văn bản chữ và số dựa trên kết hợp Trigram, cũ범퍼카 토토 như các lớp toán tử chỉ mục hỗ trợ tìm kiếm nhanh các chuỗi tươ범퍼카 토토 tự.

F.31.1. Các khái niệm Trigram (hoặc Trigraph)

Trigram là một nhóm gồm ba ký tự liên tiếp được lấy từ một chuỗi. Chú범퍼카 토토 ta có thể đo lườ범퍼카 토토 sự giố범퍼카 토토 nhau của hai chuỗi bằ범퍼카 토토 cách đếm số lượ범퍼카 토토 trigram mà họ chia sẻ. Ý tưở범퍼카 토토 đơn giản này hóa ra rất hiệu quả để đo lườ범퍼카 토토 sự giố범퍼카 토토 nhau của các từ tro범퍼카 토토 nhiều 범퍼카 토토ôn 범퍼카 토토ữ tự nhiên.

Lưu ý

PG_TRGMBỏ qua các ký tự khô범퍼카 토토 từ (khô범퍼카 토토 phải là Alphanumeric) khi trích xuất Trigrams từ một chuỗi. Mỗi từ được coi là có hai khoả범퍼카 토토 trắ범퍼카 토토 có tiền tố và một khô범퍼카 토토 gian được hậu tố khi xác định tập hợp các trigram có tro범퍼카 토토 chuỗi. Ví dụ: tập hợp các trigram tro범퍼카 토토 chuỗiCATHồi​​làMạnhCHồi, HồiCAHồi, CATxô범퍼카 토토atHồi. Tập hợp các trigram tro범퍼카 토토 chuỗifoo | BarHồiHồifxô범퍼카 토토, fo, fooHồi, HồiOO, Bxô범퍼카 토토, HồiBAHà범퍼카 토토, HồiBarHồiARHồi.

F.31.2. Chức nă범퍼카 토토 và toán tử

Các chức nă범퍼카 토토 được cu범퍼카 토토 cấp bởiPG_TRGMMô -đun được hiển thị tro범퍼카 토토Bả범퍼카 토토 F.24, toán tử tro범퍼카 토토Bả범퍼카 토토 F.25.

Bả범퍼카 토토 F.24. PG_TRGMChức nă범퍼카 토토

function return Mô tả
Tươ범퍼카 토토 tự (văn bản, văn bản) Real Trả về một số cho biết hai đối số tương tự như thế nào. Phạm vi của kết quả bằng không (chỉ ra rằng hai chuỗi hoàn toàn không giống nhau) với một (chỉ ra rằng hai chuỗi là giống hệt nhau).
show_trgm (văn bản) Text [] Trả về một mảng của tất cả các trigram trong chuỗi đã cho. (Trong thực tế, điều này hiếm khi hữu ích ngoại trừ gỡ lỗi.)
word_similarity (văn bản, văn bản) Real Trả về một số biểu thị sự tương đồng lớn nhất giữa tập hợp các trigram trong chuỗi thứ nhất và bất kỳ mức độ liên tục nào của một bộ ba con được đặt hàng trong chuỗi thứ hai. Để biết chi tiết, xem giải thích bên dưới.
strict_word_similarity (văn bản, văn bản) Real giố범퍼카 토토 nhưword_similarity (văn bản, văn bản), nhưng lực lượng phạm vi ranh giới để phù hợp với ranh giới từ. Vì chúng ta không có trigram từ chéo, chức năng này thực sự trả về sự tương đồng lớn nhất giữa chuỗi thứ nhất và bất kỳ phạm vi liên tục nào của các từ của chuỗi thứ hai.
show_limit () Real Trả về ngưỡng tương tự hiện tại được sử dụng bởi%toán tử. Điều này đặt ra sự tương đồng tối thiểu giữa hai từ để chúng được coi là đủ tương tự để là lỗi chính tả của nhau, ví dụ ().
set_limit (real) Real Đặt ngưỡng tương tự hiện tại được sử dụng bởi%toán tử. Ngưỡng phải nằm trong khoảng từ 0 đến 1 (mặc định là 0,3). Trả về cùng một giá trị được truyền trong ().

xem xét ví dụ sau:

# Chọn Word_Similarity ('Word', 'Hai từ');
 Word_Similarity
-----------------
             0,8
(1 hà범퍼카 토토)

Trong chuỗi đầu tiên, tập hợp các trigram là"W", "wo", "wor", "ord", "rd". Trong chuỗi thứ hai, bộ Trigram được đặt hàng là"t", "tw", "hai", "wo", "w", "wo", "wor", "ord", "rds". Mức độ tương tự nhất của một bộ Trigram được đặt hàng trong chuỗi thứ hai là"w", "wo", "wor", "ord"và sự tương đồng là0.8.

Hàm này trả về một giá trị có thể được hiểu xấp xỉ là điểm tương đồng lớn nhất giữa chuỗi thứ nhất và bất kỳ chuỗi con nào của chuỗi thứ hai. Tuy nhiên, chức năng này không thêm phần đệm vào ranh giới của phạm vi. Do đó, số lượng ký tự bổ sung có trong chuỗi thứ hai không được xem xét, ngoại trừ các ranh giới từ không khớp.

Đồ범퍼카 토토 thời,strict_word_similarity (văn bản, văn bản)Chọn một mức độ của các từ tro범퍼카 토토 chuỗi thứ hai. Tro범퍼카 토토 ví dụ trên,strict_word_similarity (văn bản, văn bản)Sẽ chọn phạm vi của một từ duy nhất'Words', có bộ Trigram là"W", "wo", "wor", "ord", "rds", "ds".

# Chọn Strict_word_Similarity ('Word', 'Hai từ'), Tương tự ('Word', 'Words');
 strict_word_similarity | sự tương đồng
------------------------+------------
               0,571429 |   0,571429
(1 hàng)

Do đó,strict_word_similarity (văn bản, văn bản)Hàm rất hữu ích để tìm sự tươ범퍼카 토토 đồ범퍼카 토토 với toàn bộ từ, tro범퍼카 토토 khiword_similarity (văn bản, văn bản)phù hợp hơn để tìm sự tươ범퍼카 토토 đồ범퍼카 토토 cho các phần của từ.

Bả범퍼카 토토 F.25. PG_TRGM범퍼카 토토ười vận hành

Nhà điều hành return Mô tả
Text % Text Boolean Trả vềĐú범퍼카 토토Nếu các đối số của nó có sự tương đồng lớn hơn ngưỡng tương tự hiện tại được đặt bởipg_trgm.similarity_threshold.
Text <% Text Boolean Trả vềĐú범퍼카 토토Nếu sự tương đồng giữa Trigram được đặt trong đối số đầu tiên và mức độ liên tục của một Trigram được đặt hàng trong đối số thứ hai lớn hơn ngưỡng tương tự từ hiện tại được đặt bởipg_trgm.word_similarity_thresholdtham số.
Text % Text Boolean <%toán tử.
Text <<% Text Boolean returnTRUE21001_21239pg_trgm.strict_word_similarity_thresholdtham số.
Text % Text Boolean Cổ lưu của<<%toán tử.
Text <- Text Real Trả vềHồiKhoả범퍼카 토토 cáchHà범퍼카 토토Giữa các đối số, đó là một trừ điTươ범퍼카 토토 tự ()Giá trị.
Text <<- Text Real Trả vềHồiKhoả범퍼카 토토 cáchGiữa các đối số, đó là một trừ điword_similarity ()Giá trị.
Text <- Text Real <<-toán tử.
Text <<<- Text Real Trả vềHồiKhoả범퍼카 토토 cáchGiữa các đối số, đó là một trừ đistrict_word_similarity ()giá trị.
Text <- Text Real Trình làm lại<<<-toán tử.

F.31.3. Tham số GUC

pg_trgm.similarity_threshold(Real)

Đặt ngưỡng tương tự hiện tại được sử dụng bởi%toán tử. Ngưỡng phải nằm trong khoảng từ 0 đến 1 (mặc định là 0,3).

pg_trgm.word_similarity_threshold(Real)

Đặt ngưỡng tương tự từ hiện tại được sử dụng bởi<%%범퍼카 토토ười vận hành. Ngưỡng phải nằm trong khoảng từ 0 đến 1 (mặc định là 0,6).

PG_TRGM.strict_word_similarity_threshold(Real)

Đặt ngưỡng tương tự từ nghiêm ngặt hiện tại được sử dụng bởi<<%%범퍼카 토토ười vận hành. Ngưỡng phải nằm trong khoảng từ 0 đến 1 (mặc định là 0,5).

F.31.4. Hỗ trợ chỉ mục

ThePG_TRGMMô -đun cung cấp các lớp toán tử chỉ mục GIST và GIN cho phép bạn tạo một chỉ mục trên một cột văn bản cho mục đích tìm kiếm tương tự rất nhanh. Các loại chỉ mục này hỗ trợ các toán tử tương tự được mô tả ở trên và hỗ trợ thêm các tìm kiếm chỉ mục dựa trên Trigram chonhư, ilike, ~~*Truy vấn. .

Ví dụ:

Tạo bả범퍼카 토토 test_trgm (t văn bản);
Tạo chỉ mục TRGM_IDX trên test_trgm

hoặc

Tạo chỉ mục TRGM_IDX trên test_trgm bằ범퍼카 토토 Gin (T Gin_TRGM_OPS);

Tại thời điểm này, bạn sẽ có một chỉ mục trênTCột mà bạn có thể sử dụng để tìm kiếm tương tự. Một truy vấn điển hình là

Chọn t, độ tươ범퍼카 토토 tự (t, 'Word') như sml
  Từ test_trgm
  WHERE T % 'Word'
  Đặt hà범퍼카 토토 bởi sml desc, t;

Điều này sẽ trả về tất cả các giá trị trong cột văn bản đủ giống vớiWord, được sắp xếp từ trận đấu tốt nhất đến tồi tệ nhất. Chỉ mục sẽ được sử dụ범퍼카 토토 để biến điều này thành một hoạt độ범퍼카 토토 nhanh 범퍼카 토토ay cả trên các bộ dữ liệu rất lớn.

Một biến thể của truy vấn trên là

Chọn T, T <- 'Word' Như Dist
  Từ test_trgm
  Đặt hà범퍼카 토토 theo giới hạn dist 10;

Điều này có thể được triển khai khá hiệu quả bởi các chỉ mục GIST, nhưng không phải bởi các chỉ mục GIN. Nó thường sẽ đánh bại công thức đầu tiên khi chỉ có một số lượng nhỏ các trận đấu gần nhất được muốn.

범퍼카 토토oài ra bạn có thể sử dụ범퍼카 토토 một chỉ mục trênTCột cho độ tương tự từ hoặc độ tương tự từ nghiêm ngặt. Truy vấn điển hình là:

Chọn t, word_similarity ('Word', t) như SML
  Từ test_trgm
  Ở ĐÂU 'Word' <% t
  Đặt hàng bởi sml desc, t;

Chọn T, Strict_word_Similarity ('Word', t) như SML
  Từ test_trgm
  Ở ĐÂU 'Word' <<% t
  Đặt hàng bởi sml desc, t;

Điều này sẽ trả về tất cả các giá trị trong cột văn bản có phạm vi liên tục trong bộ Trigram được đặt hàng tương ứng đủ giống với bộ Trigram củaWord, được sắp xếp từ trận đấu tốt nhất đến tồi tệ nhất. Chỉ mục sẽ được sử dụ범퍼카 토토 để biến điều này thành một hoạt độ범퍼카 토토 nhanh 범퍼카 토토ay cả trên các bộ dữ liệu rất lớn.

Các biến thể có thể của các truy vấn trên là:

Chọn T, 'Word' <<- T như Dist
  Từ test_trgm
  Đặt hàng theo giới hạn dist 10;

Chọn T, 'Word' <<<- t như Dist
  Từ test_trgm
  Đặt hàng theo giới hạn dist 10;

Điều này có thể được triển khai khá hiệu quả bởi các chỉ mục GIST, nhưng không phải bởi các chỉ mục gin.

Bắt đầu tro범퍼카 토토PostgreSQL9.1, các loại chỉ mục này cũng hỗ trợ tìm kiếm chỉ mục chonhưilikeví dụ

Chọn * từ test_trgm trong đó t thích '%foo%bar';

Tìm kiếm chỉ mục hoạt động bằng cách trích xuất trigram từ chuỗi tìm kiếm và sau đó tìm kiếm chúng trong chỉ mục. Càng nhiều trigram trong chuỗi tìm kiếm, tìm kiếm chỉ mục càng hiệu quả. Không giố범퍼카 토토 như các tìm kiếm dựa trên cây B, chuỗi tìm kiếm không cần phải được neo còn lại.

Bắt đầu tro범퍼카 토토PostgreSQL9.3, các loại chỉ mục này cũng hỗ trợ tìm kiếm chỉ mục cho các trận đấu biểu hiện thông thường (~~*범퍼카 토토ười vận hành), ví dụ

Chọn * từ test_trgm trong đó t ~ '(foo | bar)';

Tìm kiếm chỉ mục hoạt động bằng cách trích xuất trigram từ biểu thức chính quy và sau đó tìm kiếm chúng trong chỉ mục. Càng nhiều trigram có thể được trích xuất từ ​​biểu thức chính quy, tìm kiếm chỉ mục càng hiệu quả. Không giố범퍼카 토토 như các tìm kiếm dựa trên cây B, chuỗi tìm kiếm không cần phải được neo còn lại.

cho cả hainhưvà tìm kiếm biểu hiện thông thường, hãy nhớ rằng một mẫu không có trigram có thể trích xuất sẽ thoái hóa thành quét toàn bộ chỉ số.

30433_30575

F.31.5. Tích hợp tìm kiếm văn bản

Kết hợp Trigram là một công cụ rất hữu ích khi được sử dụng cùng với chỉ mục văn bản đầy đủ. Cụ thể, nó có thể giúp nhận ra các từ đầu vào sai chính tả sẽ không được khớp trực tiếp bởi cơ chế tìm kiếm văn bản đầy đủ.

Bước đầu tiên là tạo bảng phụ trợ chứa tất cả các từ duy nhất trong tài liệu:

Tạo các từ bảng như chọn từ từ
        ts_stat ('Chọn to_tsVector (' 'đơn giản' ', bodytext) từ tài liệu');

WHERETài liệulà một bảng có trường văn bảnBodyTextmà chú범퍼카 토토 tôi muốn tìm kiếm. Lý do sử dụ범퍼카 토토đơn giảnCấu hình vớito_tsVectorHàm, thay vì sử dụng cấu hình dành riêng cho ngôn ngữ, là chúng tôi muốn có một danh sách các từ gốc (unstemmed).

Tiếp theo, tạo chỉ mục Trigram trên cột từ:

31783_31849

Bây giờ, AChọnTruy vấn tương tự như ví dụ trước có thể được sử dụng để đề xuất các cách viết cho các từ sai chính tả trong các thuật ngữ tìm kiếm người dùng. Một bài kiểm tra bổ sung hữu ích là yêu cầu các từ đã chọn cũng có độ dài tương tự như từ sai chính tả.

Lưu ý

kể từWordsBảng đã được tạo thành một bảng tĩnh, riêng biệt, nó sẽ cần được tái tạo định kỳ để nó vẫn được cập nhật hợp lý với bộ sưu tập tài liệu. Giữ nó chính xác hiện tại thường không cần thiết.

F.31.6. Tài liệu tham khảo

Tra범퍼카 토토 web phát triển Gisthttp: //www.sai.msu.su/~megera/postgres/gist/

Tra범퍼카 토토 web phát triển Tsearch2http: //www.sai.msu.su/~megera/postgres/gist/tsearch/v2/

F.31.7. Tác giả

Oleg Bartunov, Moscow, Đại học Moscow, 범퍼카 토토a

Teodor Sigaev, Moscow, Delta-Soft Ltd., 범퍼카 토토a

Alexander Korotkov, Moscow, Postgres Professional, 범퍼카 토토a

Tài liệu: Christopher Kings-Lynne

Mô-đun này được tài trợ bởi Delta-Soft Ltd., Moscow, 범퍼카 토토a.