Mô -đun này thực hiện kiểu dữ liệultree
Để biểu diễn kèo bóng đá euro dữ liệu được lưu trữ trong cấu trúc giống như cây phân cấp. Các cơ sở rộng lớn để tìm kiếm qua các cây kèo bóng đá euro được cung cấp.
Akèo bóng đá eurolà kèo bóng đá euro chuỗi các ký tự chữ và số (ví dụ: trong c locale các ký tựA-ZA-Z0-9_
được cho phép). kèo bóng đá euro phải dài dưới 256 ký tự.
Ví dụ:42
, cá nhân_service
Ađường dẫn kèo bóng đá eurolà một chuỗi không hoặc nhiều kèo bóng đá euro được phân tách bằng các dấu chấm, ví dụL1.L2.L3
, đại diện cho một đường dẫn từ gốc của một cây phân cấp đến một nút cụ thể. Độ dài của đường dẫn kèo bóng đá euro không thể vượt quá 65535 kèo bóng đá euro.
Ví dụ:top.countries.europe.russia
TheLtree
Mô -đun cung cấp kèo bóng đá euro số loại dữ liệu:
Ltree
Lưu trữ đường dẫn kèo bóng đá euro.
lquery
đại diện cho kèo bóng đá euro mẫu giống như biểu hiện thông thường để kết hợpLtree
Giá trị. Một từ đơn giản phù hợp với kèo bóng đá euro đó trong một đường dẫn. Một ký hiệu ngôi sao (*
) khớp với số không hoặc nhiều kèo bóng đá euro. Ví dụ:
fookhớp với đường dẫn kèo bóng đá euro chính xácfoo
*.foo.*Phù hợp với bất kỳ đường dẫn kèo bóng đá euro nào chứa kèo bóng đá eurofoo
*.foo11888_11931foo
Biểu tượng ngôi sao cũng có thể được định lượng để hạn chế số lượng chúng có thể khớp:
*n
khớp chính xácn
kèo bóng đá euro*n
,Trận đấu ít nhấtn
kèo bóng đá euro*n
,M
Trận đấu ít nhấtn
nhưng không quáM
kèo bóng đá euro*,M
Kết hợp nhiều nhấtM
kèo bóng đá euro - giống như*0,M
Có một số công cụ sửa đổi có thể được đặt ở cuối kèo bóng đá euro không sao tronglquery
Để làm cho nó phù hợp hơn là chỉ phù hợp chính xác:
@Ví dụ, phù hợp với trường hợp không nhạy cảm, ví dụA@
khớpA
* Phù hợp với bất kỳ kèo bóng đá euro nào với tiền tố này, ví dụfoo*
MatchesFoobar
%Kết hợp các từ được viết tắt ban đầu
Hành vi của%
hơi phức tạp. Nó cố gắng để phù hợp với các từ hơn là toàn bộ kèo bóng đá euro. Ví dụfoo_bar%
Matchesfoo_bar_baz
nhưng khôngfoo_barbaz
. Nếu kết hợp với*
, Tiền tố khớp áp dụng riêng cho từng từ, ví dụfoo_bar%*
khớpfoo1_bar2_baz
nhưng khôngFOO1_BR2_BAZ
.
Ngoài ra, bạn có thể viết một số kèo bóng đá euro có thể sửa đổi được phân tách bằng|
(hoặc) để phù hợp với bất kỳ kèo bóng đá euro nào trong số đó và bạn có thể đặt!
(không) khi bắt đầu phù hợp với bất kỳ kèo bóng đá euro nào không khớp với bất kỳ lựa chọn thay thế nào.
Đây là kèo bóng đá euro ví dụ được chú thích củalquery
:
Top.*0,2 .Sport*@.! Bóng đá | Tennis.russ*| Tây Ban Nha kèo bóng đá euro. b. c. d. e.
Truy vấn này sẽ phù hợp với bất kỳ đường dẫn kèo bóng đá euro nào:
Bắt đầu bằng kèo bóng đá euroTOP
và Next có từ 0 đến hai kèo bóng đá euro trước
Một kèo bóng đá euro bắt đầu với tiền tố không nhạy cảm với trường hợpSport
Sau đó, một kèo bóng đá euro không khớpbóng đá
cũng khôngTennis
Và sau đó kết thúc bằng một kèo bóng đá euro bắt đầu bằngRuss
hoặc khớp chính xácTây Ban Nha
.
LtxtQuery
đại diện cho kèo bóng đá euro mẫu toàn văn-tìm kiếm để kết hợpLtree
Giá trị. MỘTLtxtQuery
Giá trị chứa các từ, có thể với các sửa đổi@
, *
, %
Ở cuối; các bộ sửa đổi có ý nghĩa giống như tronglquery
. Các từ có thể được kết hợp với&
(và),|
(hoặc),!
(không) và dấu ngoặc đơn. Sự khác biệt chính từlquery
làLtxtQuery
khớp với các từ mà không liên quan đến vị trí của chúng trong đường dẫn kèo bóng đá euro.
Đây là kèo bóng đá euro ví dụLtxtQuery
:
Châu Âu & Nga*@ &! Giao thông vận tải
Điều này sẽ khớp với các đường dẫn có chứa kèo bóng đá euroChâu Âu
và bất kỳ kèo bóng đá euro nào bắt đầu bằngNga
16480_16538Vận chuyển
. Vị trí của những từ này trong đường kèo bóng đá euro không quan trọng. Ngoài ra, khi%
được sử dụng, từ có thể được khớp với bất kỳ từ được phân tách trong một kèo bóng đá euro, bất kể vị trí.
Lưu ý:LtxtQuery
Cho phép khoảng trắng giữa các ký hiệu, nhưngltree
vàlquery
Không.
loạiLtree
Có toán tử so sánh thông thường=
, <
, <
, ,
<=
, =
. So sánh sắp xếp theo thứ tự của một cây truyền tải, với những đứa trẻ của một nút được sắp xếp theo văn bản kèo bóng đá euro. Ngoài ra, các toán tử chuyên dụng được hiển thị trongBảng F.14có sẵn.
Bảng F.14.Ltree
Người vận hành
Nhà điều hành | return | Mô tả |
---|---|---|
Ltree @ Ltree |
Boolean |
là đối số trái kèo bóng đá euro tổ tiên bên phải (hoặc bằng)? |
Ltree <@ Ltree |
Boolean |
là đối số trái là hậu duệ của bên phải (hoặc bằng)? |
Ltree ~ lquery |
Boolean |
khôngLtree khớplquery ? |
lquery ~ Ltree |
Boolean |
khôngLtree khớplquery ? |
Ltree ? lquery [] |
Boolean |
khôngLtree khớp với bất kỳlquery Trong mảng? |
lquery [] ? Ltree |
Boolean |
khôngLtree khớp với bất kỳlquery Trong mảng? |
Ltree @ Ltxtquery |
Boolean |
khôngLtree khớpLtxtquery ? |
ltxtquery @ Ltree |
Boolean |
khôngLtree khớpLtxtQuery ? |
Ltree || ltree |
Ltree |
ConcatenateLtree đường kèo bóng đá euro |
Ltree || Text |
Ltree |
Chuyển đổi văn bản thànhLtree và Concatenate |
Text || Ltree |
Ltree |
Chuyển đổi văn bản thànhLtree và Concatenate |
Ltree [] @ Ltree |
Boolean |
Mảng có chứa tổ tiên củaLtree ? |
Ltree <@ ltree [] |
Boolean |
mảng có chứa tổ tiên củaLtree ? |
ltree [] <@ Ltree |
Boolean |
mảng có chứa hậu duệ củaLtree ? |
Ltree @ ltree [] |
Boolean |
Mảng có chứa hậu duệ củaLtree ? |
ltree [] ~ lquery |
Boolean |
Mảng có chứa bất kỳ đường kèo bóng đá euro nào khớplquery ? |
lquery ~ Ltree [] |
Boolean |
Mảng có chứa bất kỳ đường kèo bóng đá euro nào khớplquery ? |
ltree [] ? lquery [] |
Boolean |
khôngLtree Mảng chứa bất kỳ đường kèo bóng đá euro nào khớp với bất kỳlquery ? |
lquery [] ? ltree [] |
Boolean |
khôngLtree Mảng chứa bất kỳ đường kèo bóng đá euro nào khớp với bất kỳlquery ? |
Ltree [] @ LtxtQuery |
Boolean |
Mảng có chứa bất kỳ đường kèo bóng đá euro nào khớpLtxtQuery ? |
LtxtQuery @ ltree [] |
Boolean |
Mảng có chứa bất kỳ đường kèo bóng đá euro nào khớpLTXTQuery ? |
ltree [] ?@ Ltree |
Ltree |
Mục nhập mảng đầu tiên là tổ tiên củaLtree ; Null nếu không |
ltree [] ? <@ Ltree |
Ltree |
Mục nhập mảng đầu tiên là hậu duệ củaLtree ; Null nếu không |
ltree [] ? ~ lquery |
Ltree |
Mục nhập mảng đầu tiên phù hợplquery ; Null nếu không |
Ltree [] ?@ LtxtQuery |
Ltree |
Mục nhập mảng đầu tiên phù hợpLtxtQuery ; Null nếu không |
Người vận hành<@
, @
, @
và~
Có các chất tương tự^<@
, ^@
, ^@
, ^~
, giống nhau ngoại trừ chúng không sử dụng các chỉ mục. Đây chỉ là hữu ích cho mục đích thử nghiệm.
Các chức năng có sẵn được hiển thị trongBảng F.15.
Bảng F.15.Ltree
Chức năng
ltree
Hỗ trợ kèo bóng đá euro số loại chỉ mục có thể tăng tốc các toán tử được chỉ định:
Chỉ mục B-Tree trênLtree
: <
, <=
, =
, =
,
Chỉ mục GIST trênLtree
: <
, <=
, =
, =
, ,
@
, <@
, @
, ~
, ?
Ví dụ về việc tạo kèo bóng đá euro chỉ mục như vậy:
30850_30905
Chỉ mục GIST trênltree []
: ltree [] <@ ltree
, ltree @ ltree []
, @
, 31145_31148
, ?
Ví dụ về việc tạo kèo bóng đá euro chỉ mục như vậy:
Tạo chỉ mục path_gist_idx khi kiểm tra bằng GIST (Array_Path);
Lưu ý: Loại chỉ mục này bị mất.
Ví dụ này sử dụng dữ liệu sau (cũng có sẵn trong tệp31619_31648
Trong phân phối nguồn):
31715_32584
Bây giờ, chúng ta có kèo bóng đá euro bảngtest
Được điền với dữ liệu mô tả hệ thống phân cấp được hiển thị bên dưới:
32739_33132
Chúng ta có thể kế thừa:
lTreetest = Chọn đường kèo bóng đá euro từ thử nghiệm trong đó đường kèo bóng đá euro <@ 'top.science'; con đường ---------------------------------------- Top.Science Top.science.Astronomy Top.science.astronomy.astrophysics Top.science.Astronomy.Cosmology (4 hàng)
Dưới đây là một số ví dụ về đường kèo bóng đá euro khớp:
33502_34155
Đây là kèo bóng đá euro số ví dụ về tìm kiếm văn bản đầy đủ:
lTreetest = Chọn đường kèo bóng đá euro từ bài kiểm tra trong đó đường kèo bóng đá euro @ 'astro*% &! Hình ảnh @'; con đường ---------------------------------------- Top.science.Astronomy Top.science.astronomy.astrophysics Top.science.Astronomy.Cosmology Top.hobbies.amateurs_astronomy (4 hàng) ltreetest = chọn đường kèo bóng đá euro từ thử nghiệm trong đó đường kèo bóng đá euro @ 'astro* &! hình ảnh @'; con đường ---------------------------------------- Top.science.Astronomy Top.science.astronomy.astrophysics Top.science.Astronomy.Cosmology (3 hàng)
Xây dựng đường kèo bóng đá euro sử dụng các chức năng:
Ltreetest = Chọn Subpath (đường kèo bóng đá euro, 0,2) | ? Cột? -------------------------------------------------- Top.science.space.astronomy Top.science.space.astronomy.astrophysics Top.science.space.astronomy.cosmology (3 hàng)
Chúng tôi có thể đơn giản hóa điều này bằng cách tạo hàm SQL chèn kèo bóng đá euro tại một vị trí được chỉ định trong một đường dẫn:
35250_35684
tiện ích mở rộng bổ sung có sẵn để thực hiện các biến đổi choLtree
Loại cho PL/Python. Các tiện ích mở rộng được gọi làltree_plpythonu
, LTREE_PLPYTHON2U
vàLTREE_PLPYTHON3U
(xemPhần 45.1Đối với quy ước đặt tên PL/Python). Nếu bạn cài đặt các biến đổi này và chỉ định chúng khi tạo hàm,Ltree
36391_36479
Được khuyến nghị mạnh mẽ rằng các tiện ích mở rộng biến đổi được cài đặt trong cùng lược đồ vớiltree
. Nếu không
Tất cả công việc được thực hiện bởi Teodor Sigaev (<teodor@stack.net
37101_37124<leg@sai.msu.su
). Nhìn thấyhttp: //www.sai.msu.su/~megera/postgres/gist/Để biết thêm thông tin. Các tác giả xin cảm ơn Eugeny Rodichev vì các cuộc thảo luận hữu ích. Nhận xét và báo cáo lỗi được hoan nghênh.