2015-03-23 28 views
7

phép nói rằng tôi có một cuốn sách đại diện như thế này:đầy đủ lập chỉ mục nội dung của cấu trúc jsonb lồng đệ quy

{ title: "Tis no book" 
    chapter: 1, 
    text: "Hello world this is a book chapter", 
    subchapters: [ 
    { 
    chapter: 1.1 
    text: "Nested sub chapter" 
    subchapters: [ 
     chapter: 1.1.1 
     text: "Nested nested..." 
     subchapters: [ ...etc...] 
    }, 
    { 
    chapter: 1.2 
    text: "Nested sub chapter 2" 
    subchapters: [ ...etc...] 
    } 
    ] 
} 

Tôi có thể sử dụng postgres' 9.4 mới jsonb/gin (hoặc bất cứ điều gì khác) để thiết lập một chỉ mục văn bản đầy đủ trên trường "text" của cấu trúc dữ liệu lồng nhau đệ quy sao cho một thư viện sách được lưu trữ vào cơ sở dữ liệu có thể được tìm kiếm bằng văn bản (sử dụng chỉ mục)?

Trả lời

-1

Tôi sẽ không trả lời câu hỏi; thay vào đó, tôi sẽ đề xuất một cách tiếp cận hoàn toàn khác.

Bạn đã xem Lucene, https://lucene.apache.org/core/ chưa? Thực hiện tìm kiếm toàn văn bản trong cơ sở dữ liệu là thiết kế tồi. Bạn nên sử dụng một trình chỉ mục toàn văn riêng biệt như Lucene. Các tài liệu Lucene nên tham chiếu đến các khóa cơ sở dữ liệu có thể được sử dụng để tìm kiếm bản ghi thực trong cơ sở dữ liệu.

Bằng cách sử dụng Lucene, bạn sẽ có khả năng nhận được hiệu suất tốt hơn nhiều so với bằng cách sử dụng các tính năng tìm kiếm toàn văn bản của cơ sở dữ liệu. Hơn nữa, Lucene dễ dàng hơn nhiều so với cơ sở dữ liệu của bạn.

+1

Yeh chắc chắn đó là giải pháp đầu tiên xuất hiện trong đầu, nhưng tôi đã đọc một số bài báo gợi ý rằng việc lập chỉ mục toàn văn trong postgres bây giờ nhanh chóng (https://wiki.postgresql.org/images/2/ 25/Full-text_search_in_PostgreSQL_in_milliseconds-extended-version.pdf) và tự hỏi nếu điều này là có thể. Nhưng nhờ kiểm tra thực tế. – gremwell

+2

Vâng, nếu bạn quyết định sử dụng chỉ mục văn bản đầy đủ của PostgreSQL, chúc bạn may mắn trong con đường bạn chọn! Một giải pháp sẽ là ghép các trường "văn bản" thành một cột riêng biệt và sử dụng lập chỉ mục toàn văn trên cột đó. Trong kết quả trong một số sao chép dữ liệu, nhưng hey, không gian đĩa là giá rẻ những ngày này. – juhist

4

Tôi vừa bắt đầu tìm kiếm các loại tìm kiếm toàn văn và các loại jsonb. Có vẻ như điều này là có thể khi bạn hiểu cách các chỉ mục hoạt động trên các loại JSONB. Tôi đã tìm thấy chuỗi blog này rất hữu ích.

https://bibhas.in/blog/postgresql-swag-part-2-indexing-json-data-type-and-full-text-search/

Ngoài ra, các tài liệu về các loại JSON tại Postgres chứa một số hiểu biết tốt. http://www.postgresql.org/docs/9.4/static/datatype-json.html

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