2012-03-05 38 views
15

Tôi có kiến ​​thức rất hạn chế trong các truy vấn AD và LDAP vì vậy tôi có một câu hỏi đơn giản về cách sử dụng ký tự đại diện.sử dụng các ký tự đại diện trong bộ lọc/truy vấn tìm kiếm LDAP

Giả sử có đối tượng với một displayName của "ITSM - Quản lý vấn đề"

thực hiện hiện tại của tôi trong những bộ lọc với một ký tự đại diện là như vậy:

(displayName=SEARCHKEYWORD*) 

Nếu người dùng sẽ nhập một từ khóa của "Vấn đề", anh sẽ không thể tìm thấy vật thể vì nó cần phần đầu tiên của tên, đó là "ITSM -"

Tôi muốn triển khai ký tự đại diện trên cả hai đầu như sau:

(displayName=*SEARCHKEYWORD*) 

Lý tưởng nhất, điều này sẽ cho phép nhập "Sự cố" và yêu cầu "ITSM - Quản lý sự cố". Nhưng ký tự đại diện dường như không hoạt động khi bạn đặt nó ngay từ đầu. Khi tôi thử nó, nó chỉ có vẻ như treo lên và không trả lại bất kỳ kết quả nào.

Bất kỳ ý tưởng hay suy nghĩ nào về cách tôi có thể giải quyết vấn đề này? Bất kỳ đầu vào nào cũng sẽ được đánh giá cao. Cảm ơn!

+1

bạn nên thông báo cho quản trị viên thư mục về ý định sử dụng bộ lọc chuỗi con để đảm bảo rằng máy chủ thư mục được định cấu hình thích hợp. Xem thêm [LDAP: Thực hành lập trình] (http://ff1959.wordpress.com/2011/10/27/ldap-programming-best-practices/). –

+0

Chỉ vì tò mò, "ITSM" có nghĩa là gì? Tôi biết một ITSM cụ thể, nhưng tôi nghi ngờ nó giống như của bạn ... – ErikE

+0

@ErikE Xin lỗi vì sự chậm trễ trong câu trả lời của tôi, ITSM = Quản lý dịch vụ CNTT. Chính sách quản lý và quy trình cho hoạt động CNTT :) – AnimaSola

Trả lời

21

Một lập luận bộ lọc với một dấu * có thể được đánh giá gần như ngay lập tức thông qua một tra cứu chỉ số. Dẫn đầu * ngụ ý tìm kiếm tuần tự qua chỉ mục, vì vậy nó là O (N). Nó sẽ mất lứa tuổi.

Tôi đề nghị bạn cân nhắc lại yêu cầu.

+0

Có vẻ như bạn đã đúng với ký tự đại diện hàng đầu trong độ tuổi, tôi đã tìm kiếm một đối tượng cụ thể theo tên và nó vẫn chưa giải quyết được tìm kiếm, tôi không nghĩ nó sẽ như thế. Cảm ơn bạn! – AnimaSola

+0

Tôi sử dụng kiểu tìm kiếm này toàn bộ thời gian và ok, chỉ cần lọc theo ObjectClass như sau: '(& (ObjectClass = Person) (cn = * KEYWORD *))' –

+0

@ManuelGutierrez Time is still * O (N), * nhưng vì bộ lọc 'objectClass' bổ sung mà bạn hiện đang xử lý với một * * nhỏ hơn * – EJP

1

Điều này sẽ hoạt động, ít nhất theo bài viết Search Filter Syntax trên mạng MSDN.

Việc "gác máy" bạn đã nhận thấy có thể chỉ là sự chậm trễ. Hãy thử chạy cùng một truy vấn với phạm vi hẹp hơn (ví dụ OU cụ thể nơi đối tượng thử nghiệm được đặt), vì có thể mất rất nhiều thời gian để xử lý nếu bạn chạy nó đối với tất cả các đối tượng AD.

Bạn cũng có thể thử tách lọc ra làm hai phần:

(|(displayName=*searchstring)(displayName=searchstring*)) 
+0

Tôi đã thử bộ lọc ở trên để tìm kiếm một đối tượng cụ thể, khi tôi nhập toàn bộ tên và tìm kiếm mất độ tuổi. Tôi không nghĩ rằng nó sẽ bao giờ giải quyết. Nhận xét của EJP rằng một ký tự đại diện hàng đầu có thể mất độ tuổi có thể đúng. Đánh giá cao câu trả lời, cảm ơn bạn! :) – AnimaSola

6

Đặt cược của bạn tốt nhất là để dự đoán các tiền tố, vì vậy:

"(|(displayName=SEARCHKEY*)(displayName=ITSM - SEARCHKEY*)(displayName=alt prefix - SEARCHKEY*))" 

phiền phức, nhưng tôi đang làm một điều tương tự trong tổ chức của tôi.

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