2012-02-17 29 views
10

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

  1. ^trận đấu đầu chuỗi. 'fofo' REGEXP '^fo' => true
  2. $ kết thúc khớp của chuỗi. 'fo\no' REGEXP '^fo\no$' => true
  3. * Ký tự đại diện không giới hạn 0. 'Baaaan' REGEXP 'Ba*n' => true
  4. ? Ký tự đại diện 0-1. 'Baan' REGEXP '^Ba?n => false'
  5. + 1 ký tự đại diện không giới hạn. 'Bn' REGEXP 'Ba+n' => false
  6. | hoặc là. 'pi' REGEXP 'pi|apa' => true
  7. () * kết hợp trình tự. 'pipi' REGEXP '^(pi)*$' => true
  8. [a-dX], [^ a-dX] nhân vật tầm/thiết 'aXbc' REGEXP '[a-dXYZ]' => true
  9. {n} hoặc {m, n} cardinality ký hiệu 'abcde' REGEXP 'a[bcd]{3}e' => true
  10. [: character_class:] 'justalnums' REGEXP '[[:alnum:]]+' => true

Trả lời

15

Phiên bản 4.0 của Lucene sẽ hỗ trợ truy vấn regex trực tiếp trong trình phân tích truy vấn chuẩn bằng cách sử dụng cú pháp đặc biệt. Tôi xác minh rằng nó hoạt động trên một thể hiện của Solr tôi đang chạy, được xây dựng từ thân cây lật đổ vào tháng Hai.

Jira ticket 2604 mô tả phần mở rộng của trình phân tích cú pháp truy vấn chuẩn sử dụng cú pháp regex đặc biệt, sử dụng dấu gạch chéo chuyển tiếp để phân định regex, tương tự như cú pháp trong Javascript. Dường như đang sử dụng trình phân tích cú pháp RegexpQuery bên dưới.

Vì vậy, một ví dụ ngắn gọn:

body:/[0-9]{5}/ 

sẽ phù hợp trên một mã zip năm chữ số trong corpus văn bản tôi đã lập chỉ mục. Nhưng, thật kỳ quặc, thân thể:/\ d {5}/không làm việc cho tôi, và^cũng thất bại.

Phương ngữ regex sẽ phải là Java, nhưng tôi không chắc liệu mọi thứ trong đó có hoạt động hay không, vì tôi chỉ thực hiện một bài kiểm tra lướt. Một có lẽ sẽ phải xem xét cẩn thận mã RegexpQuery để hiểu những gì làm việc và những gì không.

+0

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). –

+0

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

+1

@RonaldWood Cả hai liên kết bạn đăng đều đã chết. – BlackVegetable

4

Biểu thức chính quy và (e) dismax không thực sự so sánh được. Dismax có nghĩa là làm việc trực tiếp với đầu vào thông thường của người dùng cuối, trong khi cụm từ thông dụng không phải là đầu vào điển hình của người dùng cuối.

Ngoài ra, đối sánh những thứ giống như biểu thức thông thường với tính năng tháo rời phụ thuộc phần lớn vào text analysis settings và thiết kế lược đồ, chứ không phải trên bản thân thiết bị. Với Solr, bạn thường điều chỉnh giản đồ và phân tích văn bản cho nhu cầu tìm kiếm cụ thể, có thể thực hiện nhiều công việc ở thời gian chỉ mục. Các biểu thức chính quy có tỷ lệ cược với điều này và thậm chí với cấu trúc cơ bản của các chỉ số đảo ngược Lucene.

Tuy nhiên, Lucene cung cấp RegexQuery và mới hơn RegexpQuery. Theo tôi biết, chúng không được tích hợp với Solr, nhưng chúng có thể. Bắt đầu một mục mới trong Solr issue tracker và mã hóa vui vẻ! :)

Hãy nhớ rằng các truy vấn regex có thể sẽ luôn luôn chậm ... nhưng chúng có thể có hiệu suất chấp nhận được trong trường hợp của bạn.

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