2016-06-08 15 views
6

Tôi có một liên kết như http://drive.google.com và tôi muốn khớp "google" trong liên kết.Làm cách nào để thực hiện một phần đối sánh trong Elasticsearch?

tôi có:

query: { 
    bool : { 
     must: { 
      match: { text: 'google'} 
     } 
    } 
} 

Nhưng điều này chỉ phù hợp nếu toàn bộ văn bản là 'google' (case insensitive, vì vậy nó cũng phù hợp với Google hoặc Google vv). Làm cách nào để tôi đối sánh với 'google' bên trong một chuỗi khác?

+0

Có lẽ 'match: {text: '. * Google. *'}' Có thể trợ giúp. –

+0

Tuyệt vời đã hoạt động! Bạn có thể đặt câu trả lời của mình là 'Trả lời' để tôi có thể chọn câu trả lời là câu trả lời hay nhất? – user3835653

+0

Tôi đã thêm câu trả lời và cung cấp một số tham chiếu có liên quan. –

Trả lời

5

Điểm có ích là regex ElasticSearch bạn đang sử dụng requires a full string match:

mẫu Lucene của luôn neo. Mẫu được cung cấp phải khớp với toàn bộ chuỗi.

Vì vậy, để phù hợp với bất kỳ ký tự (nhưng một dòng mới), bạn có thể sử dụng .* mẫu:

match: { text: '.*google.*'} 
       ^^  ^^ 

hơn Một biến thể là đối với trường hợp khi chuỗi của bạn có thể có dòng mới: match: { text: '(.|\n)*google(.|\n)*'}. Điều này khủng khiếp (.|\n)* là phải trong ElasticSearch vì hương vị regex này không cho phép bất kỳ giải pháp [\s\S], cũng không phải bất kỳ cờ DOTALL/Singleline. "The Lucene regular expression engine is not Perl-compatible but supports a smaller range of operators."

+0

Điều này không phù hợp với tôi. – Battousai

+0

@Battousai Hãy đăng câu hỏi. Hầu hết có thể có vấn đề với * cách * bạn đang sử dụng regex. –

0

Để có giải pháp chung chung hơn, bạn có thể xem xét bằng cách sử dụng trình phân tích khác hoặc tự định nghĩa. Tôi giả sử bạn đang sử dụng trình phân tích tiêu chuẩn sẽ tách http://drive.google.com thành mã thông báo "http" và "drive.google.com". Đây là lý do tại sao tìm kiếm chỉ google không hoạt động vì nó đang cố gắng so sánh nó với toàn bộ "drive.google.com".

Nếu thay vào đó bạn lập chỉ mục tài liệu bằng trình phân tích đơn giản, nó sẽ chia thành tài liệu "http", "drive", "google" và "com". Điều này sẽ cho phép bạn đối sánh với bất kỳ ai trong số những điều khoản đó một mình.

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