Cụm từ thông dụng cho phép cú pháp khớp mẫu được hiển thị bên dưới. Tôi đang cố gắng triển khai một công cụ tìm kiếm mạnh mẽ triển khai nhiều công cụ nhất có thể. Tôi nói rằng edismax là công cụ linh hoạt nhất cho công việc. Biểu thức kết hợp mẫu nào dưới đây có thể được thực hiện bằng edismax? Tôi có thể làm tốt hơn so với edismax? Bạn có thể đề xuất bộ lọc nào và các bản vá lỗi phân tích cú pháp mà tôi có thể sử dụng để tiến hành đạt được chức năng này không? Tôi có mơ không nếu tôi nghĩ Solr có thể đạt được hiệu suất chấp nhận được (tức là thời gian xử lý phía máy chủ) của các loại tìm kiếm này?Các tính năng biểu thức chính quy nào được hỗ trợ bởi Solr edismax?
biểu thức chính quy cú pháp & ví dụ từ mysql
- ^trận đấu đầu chuỗi.
'fofo' REGEXP '^fo' => true
- $ kết thúc khớp của chuỗi.
'fo\no' REGEXP '^fo\no$' => true
- * Ký tự đại diện không giới hạn 0.
'Baaaan' REGEXP 'Ba*n' => true
- ? Ký tự đại diện 0-1.
'Baan' REGEXP '^Ba?n => false'
- + 1 ký tự đại diện không giới hạn.
'Bn' REGEXP 'Ba+n' => false
- | hoặc là.
'pi' REGEXP 'pi|apa' => true
- () * kết hợp trình tự.
'pipi' REGEXP '^(pi)*$' => true
- [a-dX], [^ a-dX] nhân vật tầm/thiết
'aXbc' REGEXP '[a-dXYZ]' => true
- {n} hoặc {m, n} cardinality ký hiệu
'abcde' REGEXP 'a[bcd]{3}e' => true
- [: character_class:]
'justalnums' REGEXP '[[:alnum:]]+' => true
Tôi đào thêm một chút. Có [trang mô tả cú pháp được hỗ trợ] (https://builds.apache.org/job/Lucene-trunk/javadoc/core/org/apache/lucene/util/automaton/RegExp.html). Động cơ regex không phải là của Java sau khi tất cả, nhưng một thực hiện trong Lucene trong gói org.apache.lucene.util.automaton. Xem thêm tài liệu cho [RegexpQuery] (https://builds.apache.org/job/Lucene-trunk/javadoc/core/org/apache/lucene/search/RegexpQuery.html). –
Chỉ cần thử '\ d {4}' trong Solr 4.0 trên một trường chuỗi. Nó không hoạt động. Có vẻ như chúng ta chỉ có thể sử dụng '[0-9] {4}'. Tuy nhiên tôi đoán^là không cần thiết, vì bất kỳ truy vấn nào giống như '/ [0-9] {5} /' thực sự tương đương với Regex tương thích Perl '/^[0-9] {5} $ /' tức là không sử dụng '. *' làm tiền tố có nghĩa là bạn đang buộc trận đấu từ char đầu tiên. – arun
@RonaldWood Cả hai liên kết bạn đăng đều đã chết. – BlackVegetable