2012-05-01 17 views
6

Tôi hiện đang chạy cặp máy khách/máy chủ Solr đang hoạt động tốt.Cách chính xác để thêm tham số truy vấn tùy chỉnh trong Solr

Tuy nhiên, trong một số trường hợp, truy vấn bộ lọc (tham số fq) được gửi tới Solr khá lớn (có thể là hàng nghìn ký tự) và không thể cắt bớt được. Khi phân tích cú pháp truy vấn mất only a fraction of the overall time, tôi muốn thử nghiệm với việc nén phần truy vấn này và gửi nó tới Solr.

Tôi đã nghĩ đến việc sửa đổi ứng dụng khách thay vì fq nó sử dụng thông số khác (ví dụ: zfq). Solr sau đó có thể quyết định - nếu nó nhận được zfq, nó sử dụng nó và giải mã dữ liệu thành fq. Nếu không, nó sẽ hoạt động như bình thường.

Cách tiêu chuẩn để đạt được điều này là gì? Có vẻ như có SearchHandler, requestHandler, <queryParser (cả trong solrconfig.xml) và nhiều người khác và tôi không hoàn toàn chắc chắn điều gì ít xâm phạm nhất. Tôi khá tự tin với Lucene/Tomcat nhưng không biết nhiều về cấu trúc dữ liệu Solr.

+2

Hàng nghìn ký tự trong một 'fq' đơn có vẻ không đúng. Thay vì cố gắng giải quyết những hạn chế, hãy tự hỏi * tại sao * bạn đang đánh những giới hạn đó. Mô tả vấn đề * thực * của bạn. –

+0

Vấn đề thực sự nằm ngoài phạm vi của câu hỏi này. Nhưng nếu bạn muốn nghe nó - chắc chắn, không có vấn đề! Độ dài đến từ cách thực hiện quyền. Đối với khách hàng có bộ quyền rộng, truy vấn bộ lọc trông giống như sau: "*: * -category: 1 AND -thể loại: 2 VÀ ... -category: N". Đó là một ứng cử viên hoàn hảo cho nén như mô hình lặp đi lặp lại. – mindas

+0

bạn đã thấy vấn đề JIRA này về bảo mật cấp tài liệu chưa? https://issues.apache.org/jira/browse/SOLR-1834 –

Trả lời

0

Bạn đã nghĩ về việc sử dụng cú pháp này -thể loại: (1 2 3 4 ... N). Điều đó sẽ làm giảm chuỗi 90%. Tốt hơn là nén.

+0

Tôi muốn các điểm thưởng không hết hạn, phải mất một chút thời gian để bạn nhận được câu trả lời được đăng: ( – mindas

1

Bạn có thể làm cho thùng chứa Solr của bạn mất các url cực kỳ dài: Tomcat here, Jetty here.

Nếu fq s có một số giá trị mặc định, bạn có thể tạo trình phân tích cú pháp truy vấn bao gồm nó theo mặc định.

<requestHandler name="for_some_queries" class="solr.SearchHandler" default="true"> 
    <!-- default values for query parameters --> 
    <lst name="defaults"> 
     <str name="echoParams">explicit</str> 
     <str name="fq">MY VERY LONG FQ</str> 
    </lst> 
    </requestHandler> 

Nhưng tôi đồng ý với Mauricio Scheffer cho một thiết kế tốt hơn.

+0

'fq' không bao giờ giống nhau nên việc đặt mặc định sẽ không giúp ích gì. Câu hỏi thực sự của tôi là làm thế nào để mở rộng Solr và không làm thế nào để giải quyết vấn đề này. – mindas

+0

Giả định xấu sau đó :-) Nhưng sẽ không tăng độ dài tiêu đề (và do đó độ dài URL) của vùng chứa Ứng dụng của bạn giải quyết vấn đề của bạn? – aitchnyu

+0

Tôi đã làm điều đó rồi, nhưng tôi muốn thử nghiệm với các truy vấn lưu trữ và xem liệu điều này có giúp giảm độ trễ hay không. – mindas

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