2011-11-22 11 views
7

Trong solr tôi muốn tìm kiếm một trường có số âm như nútId: -1. trong schema.xml, tôi định nghĩa nó như thế này: < lĩnh vực name = "nodeID" type = "int" lập chỉ mục = "true" lưu trữ = "true" />cách tìm số âm trong solr?

Solr ném lỗi khi sử dụng "nodeID: - 1 "để tìm kiếm như thế này: org.apache.lucene.queryParser.ParseException: Không thể phân tích cú pháp 'storeId: -1': Đã gặp phải" "-" "-" "ở dòng 1, cột 8. Đã mong đợi một trong số:" ("..." * "... ... ... ... ..." ["..." {"... ...

Tôi phải tìm kiếm với storeId: \ - 1 hoặc storeId: "- 1" để nhận câu trả lời.

bây giờ câu hỏi là: Tôi có thể sửa đổi bất kỳ tệp cấu hình solr nào không để tìm kiếm mà không có bất kỳ ký tự thoát nào? Hoặc một cách khác để giải quyết vấn đề này mà không cần sửa đổi mã java. Cảm ơn.

Trả lời

2

"-" là một ký tự đặc biệt cho trình phân tích cú pháp truy vấn, được sử dụng để đánh dấu một số mệnh đề bị cấm. Nếu bạn không muốn thoát khỏi ký tự này, bạn cần phải thay đổi trình phân tích truy vấn của mình.

Bạn có thể muốn thử dùng raw query parser: q={!raw f=nodeId}-1 nhưng không có tính năng nào của trình phân tích truy vấn mặc định. Trên thực tế, trình phân tích cú pháp truy vấn thô chỉ cho phép bạn chạy các truy vấn thuần túy.

3

Cá nhân tôi nghĩ rằng thoát đúng cách bên trong mã Java của bạn là cách tốt hơn. ClientUtils.escapeQueryChars sẽ là phương pháp lựa chọn.