2010-07-09 40 views
18

Làm cách nào để tôi có thể truy vấn một trường hợp solr cho tất cả các tên trường (hoặc tiền tố)?Solr: Lấy tên trường từ chỉ mục solr?

Tôi muốn sử dụng các lĩnh vực năng động như

category_0_s 
category_1_s 
... 

nhưng tôi không biết có bao nhiêu có thể tồn tại. Vì vậy, tôi muốn lấy tất cả các trường (tốt nhất là với tiền tố "category_").

Bất kỳ ý tưởng nào? Cảm ơn

Trả lời

20

Sử dụng bộ xử lý luke:

http://solr:8983/solr/admin/luke?numTerms=0 

Sử dụng xpath để có được tất cả các lĩnh vực trong đó có các dynamicBase thẻ phù hợp với định nghĩa lĩnh vực năng động bạn đang tìm kiếm.

+1

CÓ! Đó là nó. Cảm ơn bạn. – floplus

+0

@Philippe Điều đó sẽ không nhận được tên của tất cả các lĩnh vực năng động được sử dụng, đó là những gì các poster ban đầu yêu cầu. Đọc kỹ câu hỏi và trả lời. – GoalBased

+0

@GoalBased Ok, nhưng nếu thay vì chỉ trích bạn đã đưa ra giải pháp tốt hơn, điều đó cũng sẽ hữu ích. Vì vậy, để cập nhật "câu trả lời" của tôi, cuộc gọi chính xác cho các trường động là http: // host: /solr/collection/schema/dynamicfields. Để biết thêm các tùy chọn, hãy xem https://cwiki.apache.org/confluence/display/solr/Schema+API – Philippe

1

Nếu bạn cần thực hiện điều này từ ứng dụng Java của mình, bạn có thể sử dụng SolrjLukeRequestRequestHandler.

Mã của bạn sẽ trông như thế này.

LukeRequest lukeRequest = new LukeRequest(); 
lukeRequest.setNumTerms(0); 

LukeResponse lukeResponse = lukeRequest.process(server); 

Map<String, FieldInfo> fieldInfoMap = lukeResponse.getFieldInfo(); 

for (Entry<String, FieldInfo> entry : fieldInfoMap.entrySet()) { 

    String fieldName = entry.getKey(); 
    FieldInfo fieldInfo = entry.getValue(); 

    // process fieldInfo  
} 
+0

'Facet' đến từ đâu? – tar

+0

Xin lỗi, đó là lỗi đánh máy. Cố định mã để lặp lại hiệu quả thông qua các mục nhập băm. Hi vọng điêu nay co ich. – cjungel

25

Truy vấn này sẽ trả về danh sách được phân tách bằng dấu phẩy của tất cả các trường đang sử dụng, kể cả trường động.

select?q=*:*&wt=csv&rows=0&facet 

Để trả lời câu hỏi ban đầu, đây là cách để có được một danh sách tất cả các lĩnh vực bắt đầu với category_

select?q=*:*&wt=csv&rows=0&facet&fl=category_* 

Sự hiện diện của các tham số facet là cần thiết để làm cho công việc truy vấn này trên các phiên bản mới hơn của Solr. Trên các phiên bản cũ hơn, nó sẽ hoạt động mà không có nó.

Trên các phiên bản cũ hơn, một ký tự đại diện trong thông số fl sẽ không hoạt động.

+2

Trong Solr5, bao gồm cả 'facet' và' facet.field' gây ra 400 Yêu cầu Xấu, nhưng vẫn bao gồm các trường. Để lại 'facet.field' trả về các trường và 200 thành công – Izkata

+0

@Izkata Cảm ơn bạn đã cải thiện! Tôi đã cập nhật câu trả lời của mình. Thật kỳ lạ, thiết lập 'facet = true' không hoạt động, nhưng' facet' không có giá trị nào hoạt động. – GoalBased

+0

Trên Solr 6.3 chỉ fl = id, category ... làm việc mà không có facet = on. Tôi tự hỏi nếu tôi vẫn cần phải thêm một cái gì đó trong lược đồ để hiển thị thông tin bổ sung – gadelkareem

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