2013-08-28 79 views
5

Tôi có truy vấn MarkLogic sau đó, khi chạy trong truy vấn giao diện điều khiển, cho phép tôi để lấy những người có đặc quyền quản trị của người sử dụng hệ thống của tôi:Document XPath tìm kiếm với API tìm kiếm Java MarkLogic của vs XQuery/XSLT API

xquery version "1.0-ml"; 
import schema namespace bfa="http://bitfood.org/auth" at "schema/auth/bitfood-auth.xsd"; 
cts:search(/bfa:AppUser[bfa:appAccess/@appRole = "ROLE_SYS_ADMIN"], cts:and-query(())) 

Tha thứ sự thiếu hiểu biết của tôi, nhưng có thể thực hiện truy vấn này bằng cách sử dụng API ứng dụng khách Java không?

Tôi biết tôi có thể sử dụng truy vấn thô qua XCC nhưng tôi đang cố gắng tránh điều đó càng nhiều càng tốt.

Tôi đã tìm hiểu thông qua tài liệu API của ứng dụng khách Java, thật không may, giao dịch ngắn gọn với các phương pháp tìm kiếm khác và không tìm thấy điều gì có thể ám chỉ rằng điều này là có thể.

CẬP NHẬT 1: Các bạn, tôi nghĩ mình đã từng tham gia showstopper ở đây.

Theo this question, các cơ sở xây dựng Tùy chọn truy vấn của API ứng dụng khách Java được đánh dấu là không dùng nữa.

@ehennum đề xuất giải pháp thay thế sử dụng tùy chọn truy vấn XML hoặc JSON. Tuy nhiên, truy vấn như vậy lựa chọn thông số kỹ thuật là still essentially defined as raw Strings in the code:

String xmlOptions = 
    "<search:options "+ 
     "xmlns:search='http://marklogic.com/appservices/search'>"+ 
     "<search:constraint name='industry'>"+ 
     "<search:value>"+ 
      "<search:element name='industry' ns=''/>"+ 
     "</search:value>"+ 
     "</search:constraint>"+ 
    "</search:options>"; 

Cấp, tôi có thể sử dụng JAXB, JDOM, các file hoặc một số công cụ khác để tạo ra XML, nhưng ý kiến ​​cá nhân của tôi là chúng ta vẫn đang phải dùng đến storing queries in resource files in the code, đó là không phải là một điều xấu trong chính nó, nhưng không xem xét cẩn thận có thể dẫn đến những cơn ác mộng bảo trì mã. Hơn nữa, thực tế là các tùy chọn này cần phải được duy trì thông qua REST tại máy chủ sẽ giới thiệu thêm một lớp các vấn đề tiềm năng trong trường hợp điều này là bắt buộc vì các tùy chọn có thể cần phải được đồng bộ hóa với mỗi cá thể cơ sở dữ liệu. một cơ sở mã.

Vì vậy, nếu các nhà phát triển Marklogic đang lắng nghe, tôi nghĩ rằng API khách hàng Java không phải là trưởng thành hoặc được ghi lại như tôi mong đợi.

tôi có hai lựa chọn cho đến nay:

1) Tôi có thể hardcode truy vấn XCC của tôi trong các tập tin String và cố gắng sử dụng placeholders tham số để chèn dữ liệu mà tôi cần và lấy thông qua một phiên XCC. Hoặc là.

2) Xem nếu có bất kỳ tập tin XSD cho namespace http://marklogic.com/appservices/search và tạo các đối tượng JAXB tĩnh từ họ để xây dựng một số loại "tiêu chí" lớp a la Hibernate hoặc QueryDSL mà, thật đáng buồn Tôi phải nói rằng, đã hỗ trợ một số mức độ MongoDB truy vấn.

Những người thực sự, mang một số phương tiện truy vấn thông thạo như QueryDSL đến Marklogic và loại bỏ điều này Rube Goldberg querying machine.

Cập nhật 2: Dường như điều này có thể được giải quyết trong ML7. Mong cho nó.

Cảm ơn!

+0

Dudes, tại sao bỏ phiếu xuống? Tôi đã không làm nghiên cứu của tôi? Tôi không chứng minh rằng mã tối thiểu là tốt hơn? Sigh ... –

Trả lời

4

Bối cảnh: API Java là một lớp trên REST API là một lớp về API tìm kiếm là một lớp trên cts: tìm kiếm

Bạn có thể bày tỏ truy vấn này trong API tìm kiếm.

Sử dụng API Java, bạn có thể tìm kiếm bằng cách sử dụng các tùy chọn truy vấn và truy vấn có cấu trúc dưới dạng một RawCombinedQueryDefinition.

Tất cả những gì đã nói, bạn có thể chỉ còn tìm kiếm một yếu tố truy vấn trên BFA: AppUser chứa một truy vấn hạn chế giá trị trên BFA: appAccess/@ appRole của "ROLE_SYS_ADMIN"

Trong khi XPath có thể được thuận tiện, đó là một ý tưởng tốt để trở thành người giao tiếp trong các biểu thức truy vấn để hiểu toàn bộ sức mạnh và tính linh hoạt của cơ sở dữ liệu.

Cập nhật 1:

Một số điều cần xem xét:

  • Một truy vấn trong API tìm kiếm có hai phần: các truy vấn (thể hiện hoặc với tìm kiếm chuỗi kiểu Google hoặc với JSON hoặc tìm kiếm có cấu trúc XML) và các tùy chọn truy vấn. StructuredQueryBuilder xây dựng tìm kiếm có cấu trúc. QueryOptionsBuilder chỉ xây dựng các tùy chọn truy vấn.

  • Trong ML 6.0-3, API REST đã giới thiệu hỗ trợ cho tìm kiếm kết hợp, cung cấp cả hai phần trong một yêu cầu. API Java đã thêm hỗ trợ cho các yêu cầu như vậy thông qua lớp RawCombinedQueryDefinition.

  • ML7 đang mở rộng tìm kiếm có cấu trúc để giảm hoặc loại bỏ nhu cầu cho các tùy chọn truy vấn với tìm kiếm có cấu trúc. StructuredQueryBuilder được tăng cường trong ML7 để hỗ trợ các tính năng mới của tìm kiếm có cấu trúc. Trong ML7, bạn sẽ có thể viết truy vấn mẫu của mình ở trên hoàn toàn trong StructuredQueryBuilder mà không cần bất kỳ tùy chọn truy vấn nào.

  • Khi chúng tôi so sánh các tùy chọn truy vấn xây dựng mã với QueryOptionsBuilder và với JDOM hoặc XOM, thật khó để thấy nhiều lợi ích của LOC trong trình tạo.

  • Bạn không phải mã hóa các tùy chọn truy vấn trong chuỗi. Để tách các mối quan ngại, bạn có thể đọc các tùy chọn truy vấn JSON hoặc XML từ một tệp hoặc từ nhiều nguồn khác. (Vui lòng xem các triển khai của giao diện điểm đánh dấu http://docs.marklogic.com/javadoc/client/com/marklogic/client/io/marker/QueryOptionsReadHandle.html.)

  • Tùy chọn truy vấn cung cấp tuyên bố thay vì mã thực thi. Song song với các tệp cấu hình Spring thay vì với các tệp SPL.

BTW, trong khi JAXB là thiết kế tuyệt vời có nguồn gốc trong các lớp Java, JAXB có thể khá đau đớn đối với các mẫu thiết kế trong một lược đồ XML phức tạp. Lược đồ tìm kiếm tận dụng các khả năng mạnh mẽ của các lược đồ XML. Khi chúng tôi khám phá tuyến đường này, chúng tôi kết luận rằng JAXB sẽ không giúp cung cấp giao diện cho các tùy chọn truy vấn.

+0

Cảm ơn bạn. Tôi đang cố gắng tìm một cách để tạo ra các tùy chọn truy vấn XML mà không có quá nhiều đau đớn. –

+0

Lưu ý.Tôi đoán bây giờ tôi sẽ phải cắn viên đạn và đi với các tùy chọn truy vấn XML vẫn tồn tại. Tôi cũng đồng ý rằng điểm cuối cùng, bó một loạt các lớp được tạo ra JAXB chỉ để chúng phản chiếu các lược đồ tương ứng của chúng là một cái gì đó tốt hơn còn lại cho các nhà phát triển ứng dụng. Tôi cũng mong chờ phiên bản nâng cao của 'StructuredQueryBuilder' trong ML7. Hy vọng rằng nó sẽ cung cấp một cơ chế truy vấn trực quan hơn. Cảm ơn! –

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