2012-04-26 27 views
5

khi tôi chuyển truy vấn "state: OR" lucene đưa ra lỗi vì nó coi "OR" là từ khóa cho mệnh đề boolean, nhưng ở đây tôi thực sự là chữ viết tắt của tiểu bang Oregon.cách thoát đúng OR và AND trong truy vấn lucene?

Tôi đã thấy rằng trích dẫn HOẶC truy vấn trở thành 'trạng thái: "HOẶC"' làm cho nó hoạt động.

nhưng điều này không có vẻ giống như một cách tiếp cận rất tốt, vì tôi sẽ phải thực hiện thay thế chuỗi cho MACHI từ khóa sử dụng lucene: AND OR NOT và những người khác ?? Tôi không có bao nhiêu

Tôi đã thử trực tiếp xây dựng truy vấn thay vì thực hiện queryParser.parse(), nhưng có vẻ như điều này không đi qua các trình phân tích, đó là một vấn đề lớn.

+0

Bạn có thể phân tích thuật ngữ trước khi tạo truy vấn theo cách thủ công – jpountz

Trả lời

3

Chỉ có 3 từ khóa độc lập trong số Lucene query syntax - AND, OR và NOT. ("TO" cũng được sử dụng, nhưng chỉ được nhận diện bên trong truy vấn phạm vi.)

Có thể giúp mã trích dẫn chỉ cần nhận ra từ khóa Lucene thực sự được sử dụng làm cụm từ trong ứng dụng của bạn (như "OR" ở trên trong ví dụ của bạn).

4

Có một số cách để thoát khỏi này, sạch hơn là để thoát khỏi AND, OR, & KHÔNG với hàng đầu backslashes ví dụ:

\\AND \\OR \\NOT

luân phiên, phân tích cú pháp mã sẽ không phân tích cú pháp tương đương chữ thường họ với tư cách là nhà khai thác

+0

Vì vậy, tôi đã làm một cái gì đó như thế này 'searchTerm.replaceAll (" \\ b (AND | OR | NOT) \\ b "," \\\\\ \\\ $ 1 ");' để thoát một chữ VÀ được sử dụng trong hộp tìm kiếm đã nhập của người dùng mà cuối cùng kết thúc bằng truy vấn solr - w mũ tôi tìm thấy là thoát khỏi AND bởi pre-pending \\ các công trình trong đó không còn là một ngoại lệ phân tích cú pháp nhưng nó không thực sự tìm kiếm chuỗi chữ. Trong Solr nói, tham số 'name: \\ AND' trong một truy vấn không tìm thấy bất kỳ kết quả nào khi nó trả về các mục có tên" Jim và john ". Trường hợp thấp hơn có thể là cách để đi, ít nhất là trong solr! – icyitscold

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