Ví dụ mờ chuỗi truy vấn Elaticsearch
Bắt truy vấn Elaticsearch đúng với cú pháp của nó có thể khó khăn và gây nhầm lẫn, mặc dù tìm kiếm là chức năng chính của Elatic…ừm…tìm kiếm. Để trợ giúp, hướng dẫn này sẽ đưa bạn qua các truy vấn tìm kiếm phổ biến cho Elaticsearch và giúp bạn đạt được thành công trong truy vấn trong tương lai Show
Cú pháp truy vấn LuceneElaticsearch là một phần của ELK Stack và được xây dựng trên Lucene, thư viện tìm kiếm từ Apache và hiển thị cú pháp truy vấn của Lucene. Nó là một phần không thể thiếu của Elaticsearch khi bạn truy vấn gốc của cụm Elaticsearch, nó sẽ cho bạn biết phiên bản Lucene
Biết cú pháp Lucene và các toán tử sẽ giúp ích rất nhiều trong việc giúp bạn xây dựng các truy vấn. Công dụng của nó là trong cả truy vấn chuỗi truy vấn đơn giản và tiêu chuẩn. Dưới đây là một số điều cơ bản Truy vấn DSLTruy vấn DSL có thể được gọi bằng hầu hết các API tìm kiếm của Elaticsearch. Để đơn giản, chúng tôi sẽ chỉ xem API tìm kiếm sử dụng điểm cuối _search. Khi gọi API tìm kiếm, bạn có thể chỉ định chỉ mục và/hoặc loại mà bạn muốn tìm kiếm. Bạn thậm chí có thể tìm kiếm trên nhiều chỉ mục bằng cách tách tên của chúng bằng dấu phẩy hoặc sử dụng ký tự đại diện để khớp với nhiều chỉ mục Tìm kiếm trên tất cả các chỉ số Logstash
Tìm kiếm trong các chỉ số khách hàng, trong các loại 5 và 6
Chúng tôi sẽ sử dụng Tìm kiếm cơ thể theo yêu cầu, vì vậy các tìm kiếm sẽ được gọi như sau
Tìm kiếm URICách dễ nhất để tìm kiếm cụm Elaticsearch của bạn là thông qua tìm kiếm URI. Bạn có thể chuyển một truy vấn đơn giản tới Elaticsearch bằng tham số truy vấn q. Truy vấn sau đây sẽ tìm kiếm toàn bộ cụm của bạn để tìm các tài liệu có trường tên bằng “travis”
Với cú pháp Lucene, bạn có thể xây dựng các tìm kiếm khá ấn tượng. Thông thường, bạn sẽ phải mã hóa URL các ký tự như khoảng trắng (chúng tôi đã bỏ qua nó trong các ví dụ này cho rõ ràng)
Có sẵn một số tùy chọn cho phép bạn tùy chỉnh tìm kiếm URI, cụ thể là về việc sử dụng bộ phân tích nào (máy phân tích), liệu truy vấn có phải chịu lỗi (dễ dãi) hay không và liệu có nên cung cấp giải thích về điểm số hay không ( Mặc dù tìm kiếm URI là một cách đơn giản và hiệu quả để truy vấn cụm của bạn, nhưng bạn sẽ nhanh chóng thấy rằng nó không hỗ trợ tất cả các tính năng mà ES cung cấp. Toàn bộ sức mạnh của Elaticsearch được thể hiện rõ ràng thông qua Request Body Search. Sử dụng Request Body Search cho phép bạn xây dựng một yêu cầu tìm kiếm phức tạp bằng cách sử dụng các phần tử và mệnh đề truy vấn khác nhau sẽ so khớp, lọc và sắp xếp cũng như thao tác tài liệu tùy thuộc vào nhiều tiêu chí Yêu cầu tìm kiếm cơ thểYêu cầu Tìm kiếm nội dung sử dụng tài liệu JSON chứa nhiều thành phần khác nhau để tạo tìm kiếm trên cụm Elaticsearch của bạn. Bạn không chỉ có thể chỉ định tiêu chí tìm kiếm mà còn có thể chỉ định phạm vi và số lượng tài liệu mà bạn mong đợi, các trường bạn muốn và nhiều tùy chọn khác Phần tử đầu tiên của tìm kiếm là phần tử truy vấn sử dụng DSL truy vấn. Việc sử dụng DSL truy vấn đôi khi có thể gây nhầm lẫn vì DSL có thể được sử dụng để kết hợp và xây dựng các mệnh đề truy vấn thành một truy vấn có thể được lồng sâu. Vì hầu hết các tài liệu của Elaticsearch chỉ đề cập đến các mệnh đề riêng biệt, nên rất dễ bị mất vị trí đặt các mệnh đề Để sử dụng DSL truy vấn, bạn cần bao gồm phần tử "truy vấn" trong nội dung tìm kiếm của mình và điền vào đó một truy vấn được tạo bằng DSL ________số 8Trong trường hợp này, phần tử “truy vấn” chứa mệnh đề truy vấn “khớp” tìm kiếm cụm từ “nghĩa” trong trường “my_field” trong tất cả các tài liệu trong cụm của bạn Phần tử truy vấn được sử dụng cùng với các phần tử khác trong nội dung tìm kiếm
Ở đây, chúng tôi đang sử dụng phần tử “trường” để hạn chế trường nào sẽ được trả về và phần tử “từ” và “kích thước” để cho Elaticsearch biết rằng chúng tôi đang tìm kiếm tài liệu từ 100 đến 119 (bắt đầu từ 100 và đếm 20 tài liệu) Lĩnh vựcBạn có thể đang tìm kiếm các sự kiện trong đó một trường cụ thể chứa các thuật ngữ nhất định. Bạn chỉ định trường, nhập dấu hai chấm, sau đó là khoảng trắng, sau đó là chuỗi trong dấu ngoặc kép hoặc giá trị không có dấu ngoặc kép. Dưới đây là một số ví dụ trường Lucene
Hãy cẩn thận với các giá trị có dấu cách, chẳng hạn như “Ned Stark. ” Bạn sẽ cần đặt nó trong dấu ngoặc kép để đảm bảo rằng toàn bộ giá trị được sử dụng Bộ lọc so với. Truy vấnNhững người đã sử dụng Elaticsearch trước phiên bản 2 sẽ quen thuộc với các bộ lọc và truy vấn. Bạn đã từng xây dựng nội dung truy vấn bằng cả bộ lọc và truy vấn. Sự khác biệt giữa hai loại này là các bộ lọc thường nhanh hơn vì chúng chỉ kiểm tra xem một tài liệu có khớp hoàn toàn hay không chứ không phải liệu nó có khớp hay không. Nói cách khác, các bộ lọc đưa ra câu trả lời boolean trong khi truy vấn trả về điểm số được tính toán về mức độ phù hợp của tài liệu với truy vấn chấm điểmChúng tôi đã đề cập đến thực tế là Elaticsearch trả về điểm số cùng với tất cả các tài liệu phù hợp từ một truy vấn 0Điểm này được tính dựa trên các tài liệu trong Elaticsearch dựa trên các truy vấn được cung cấp. Các yếu tố như độ dài của trường, tần suất xuất hiện của thuật ngữ đã chỉ định trong trường và (trong trường hợp tìm kiếm ký tự đại diện và tìm kiếm mờ) mức độ khớp của thuật ngữ với giá trị đã chỉ định, tất cả đều ảnh hưởng đến điểm số. Điểm tính toán sau đó được sử dụng để sắp xếp các tài liệu, thường là từ điểm cao nhất đến thấp nhất và các tài liệu có điểm cao nhất sau đó sẽ được trả lại cho khách hàng. Có nhiều cách khác nhau để tác động đến điểm số của các truy vấn khác nhau, chẳng hạn như tham số tăng. Điều này đặc biệt hữu ích nếu bạn muốn một số truy vấn nhất định trong một truy vấn phức tạp có trọng lượng lớn hơn các truy vấn khác và bạn đang tìm kiếm các tài liệu quan trọng nhất Khi sử dụng truy vấn trong ngữ cảnh bộ lọc (như đã giải thích trước đó), không có điểm nào được tính. Điều này cung cấp hiệu suất nâng cao thường được kết hợp với việc sử dụng các bộ lọc nhưng không cung cấp các tính năng quan trọng và thứ tự đi kèm với tính điểm Truy vấn Cấp kỳ hạn1. Phạm vi truy vấnBạn có thể tìm kiếm các trường trong một phạm vi cụ thể, sử dụng dấu ngoặc vuông để tìm kiếm phạm vi bao gồm và dấu ngoặc nhọn để tìm kiếm phạm vi riêng
Như bạn có thể thấy trong các ví dụ trên, bạn cũng có thể sử dụng phạm vi trong các trường không phải là số như chuỗi và ngày tháng 2. Truy vấn ký tự đại diệnTìm kiếm sẽ không phải là tìm kiếm nếu không có ký tự đại diện. Bạn có thể sử dụng ký tự * cho nhiều ký tự đại diện hoặc ?
3. Truy vấn Regex (regex)Truy vấn Regex ( 7) cung cấp cho bạn nhiều quyền lực hơn. Chỉ cần đặt regex của bạn giữa các dấu gạch chéo về phía trước (/)
4. truy vấn mờTìm kiếm mờ sử dụng Khoảng cách Damerau-Levenshtein để đối sánh các thuật ngữ giống nhau về chính tả. Điều này thật tuyệt khi tập dữ liệu của bạn có từ sai chính tả Sử dụng dấu ngã (~) để tìm các từ tương tự
Điều này sẽ trả về các kết quả như “thổi,” “brow,” và “glow. ” Sử dụng dấu ngã (~) cùng với một số để chỉ định khoảng cách giữa các từ có thể là bao nhiêu
Điều này sẽ phù hợp, trong số những thứ khác. “jean,” “johns,” “jhon,” và “horn” 5. Văn bản miễn phíNó đơn giản như nó nghe. Chỉ cần nhập thuật ngữ hoặc giá trị bạn muốn tìm. Đây có thể là một trường, một chuỗi trong một trường, v.v. 6. Truy vấn thuật ngữ ElaticsearchCũng chỉ được gọi là truy vấn thuật ngữ, điều này sẽ trả về kết quả khớp chính xác cho một thuật ngữ nhất định. Lấy ví dụ này từ cơ sở dữ liệu thống kê bóng chày 2Đảm bảo rằng bạn đang sử dụng truy vấn thuật ngữ ở đây, KHÔNG phải truy vấn văn bản. Truy vấn thuật ngữ sẽ tìm kiếm kết quả khớp chính xác; 7. Điều khoản Elaticsearch Đặt truy vấnTương tự như truy vấn thuật ngữ, truy vấn term_set có thể tìm kiếm nhiều giá trị dựa trên các điều kiện nhất định được xác định trong yêu cầu PUT. Để tiếp tục ví dụ bóng chày 0Truy vấn tổng hợpToán tử Boolean và Truy vấn BoolNhư với hầu hết các ngôn ngữ máy tính, Elaticsearch hỗ trợ các toán tử AND, OR và NOT
Mặc dù có nhiều loại mệnh đề truy vấn, nhưng loại mà bạn sẽ sử dụng nhiều nhất là Truy vấn phức hợp vì nó được dùng để kết hợp nhiều mệnh đề nhằm xây dựng các truy vấn phức tạp Truy vấn Bool có lẽ được sử dụng nhiều nhất vì nó có thể kết hợp các tính năng của một số mệnh đề truy vấn ghép khác như mệnh đề And, Or, Filter và Not. Nó được sử dụng nhiều đến mức bốn mệnh đề này không được dùng trong các phiên bản khác nhau để chuyển sang sử dụng truy vấn Bool. Sử dụng nó được giải thích tốt nhất với một ví dụ 1Trong phần tử truy vấn, chúng tôi đã thêm mệnh đề bool cho biết đây sẽ là một truy vấn boolean. Có khá nhiều thứ đang diễn ra trong đó, vì vậy hãy trình bày từng điều khoản một, bắt đầu từ đầu phảiTất cả các truy vấn trong mệnh đề này phải khớp với một tài liệu để ES trả lại tài liệu đó. Hãy coi đây là truy vấn AND của bạn. Truy vấn mà chúng tôi sử dụng ở đây là truy vấn mờ và nó sẽ khớp với bất kỳ tài liệu nào có trường tên khớp với “ 8” theo cách mờ. Tham số “độ mờ” bổ sung cho Elaticsearch biết rằng nó nên sử dụng Damerau-Levenshtein Khoảng cách 2 hai xác định độ mờkhông đượcBất kỳ tài liệu nào khớp với truy vấn trong mệnh đề này sẽ nằm ngoài tập kết quả. Đây là toán tử NOT hoặc dấu trừ (-) của truy vấn DSL. Trong trường hợp này, chúng tôi thực hiện một truy vấn khớp đơn giản, tìm kiếm các tài liệu có chứa thuật ngữ “thành phố. ” Đây là điều khoản 9, vì vậy các tài liệu phù hợp sẽ bị loại trừNênCho đến bây giờ, chúng tôi đã làm việc với những điều tuyệt đối. 0 và 9. Nên không tuyệt đối và tương đương với toán tử OR. Elaticsearch sẽ trả về bất kỳ tài liệu nào khớp với một hoặc nhiều truy vấn trong mệnh đề nênTruy vấn đầu tiên mà chúng tôi cung cấp sẽ tìm kiếm các tài liệu có trường tuổi nằm trong khoảng từ 30 đến 40. Truy vấn thứ hai thực hiện tìm kiếm ký tự đại diện trên trường họ, tìm kiếm các giá trị bắt đầu bằng “K. ” Truy vấn chứa ba mệnh đề khác nhau, vì vậy Elaticsearch sẽ chỉ trả về các tài liệu phù hợp với tiêu chí trong tất cả chúng. Các truy vấn này có thể được lồng vào nhau, vì vậy bạn có thể xây dựng các truy vấn rất phức tạp bằng cách chỉ định truy vấn bool dưới dạng truy vấn 0, 9, 4 hoặc 5lọcMột loại mệnh đề mà chúng ta chưa thảo luận cho truy vấn ghép là mệnh đề 5. Đây là một ví dụ nơi chúng tôi sử dụng một 2Truy vấn 7 trong mệnh đề must cho Elaticsearch biết rằng nó sẽ trả về tất cả các tài liệu. Đây có vẻ không phải là một tìm kiếm hữu ích cho lắm, nhưng nó rất hữu ích khi bạn sử dụng nó cùng với một bộ lọc như chúng tôi đã thực hiện ở đây. Bộ lọc mà chúng tôi đã chỉ định là truy vấn thuật ngữ, yêu cầu tất cả các tài liệu chứa trường email có giá trị “joe@bloggs. com. ”Chúng tôi đã sử dụng bộ lọc để chỉ định tài liệu nào chúng tôi muốn, vì vậy tất cả chúng sẽ được trả về với số điểm là 1. Các bộ lọc không ảnh hưởng đến việc tính điểm, vì vậy truy vấn match_all cho tất cả các tài liệu điểm 1 Thêm về chủ đề
Một điều cần lưu ý là truy vấn này sẽ không hoạt động nếu trường email được phân tích, đây là giá trị mặc định cho các trường trong trường Elaticsearch. Lý do được thảo luận tốt nhất trong một bài đăng trên blog khác, nhưng thực tế là Elaticsearch phân tích cả trường và truy vấn khi chúng xuất hiện. Trong trường hợp này, trường email sẽ chia thành ba phần. joe, blog và com. Điều này có nghĩa là nó sẽ khớp với các tìm kiếm và tài liệu cho bất kỳ ba cụm từ nào trong số đó Tăng truy vấnCó ba loại truy vấn tăng cường trong Elaticsearch. 8, 9 và 0. Các truy vấn tích cực thực sự là các truy vấn chính mà bạn muốn tích lũy điểm số liên quan. negative_boost là một giá trị từ 0 đến 1, dựa vào đó bạn sẽ nhân các kết quả truy vấn phủ định (nếu bạn đặt 0 ở. 25, nó làm giảm giá trị của truy vấn phủ định xuống còn một phần tư của truy vấn khẳng định;. 5 đến một nửa giá trị dương;. 1 phần mười giá trị của một truy vấn tích cực, v.v. Điều này mang lại cho bạn rất nhiều sự linh hoạt trong việc phân loại các truy vấn của bạnTruy vấn điểm cố địnhĐây là một công cụ có giá trị để phân đoạn các truy vấn nhất định mà bạn muốn tăng điểm số. Gói mã 2 cô lập các cụm từ tìm kiếm nhất định và ghép chúng với một giá trị tăng riêng biệt 3Vì vậy, trong trường hợp này, bạn đang cung cấp cho bất kỳ nhật ký NGINX nào giá trị lớn hơn các nhật ký khác (có lẽ là hơn các nhật ký máy chủ khác như nhật ký apache2 hoặc nhật ký IIS) Disjunction Max truy vấnHãy tưởng tượng nếu kết quả Google của bạn có thể tách biệt giữa các kết quả bao gồm nhiều thứ bạn đang tìm kiếm và chỉ một vài thứ. Đó là những gì nó làm. Bạn có thể nhóm các truy vấn lại với nhau dưới dạng các trường lồng nhau trong tham số 3 4truy vấn function_scoreTruy vấn điểm của hàm, như tên gọi của chúng, tồn tại để giúp sử dụng hàm để tính điểm dễ dàng hơn. Xác định truy vấn và đặt quy tắc về cách tăng điểm kết quả Sự kết luậnĐiều khó nhất về Elaticsearch là độ sâu và bề rộng của các tính năng có sẵn. Chúng tôi đã cố gắng trình bày các yếu tố thiết yếu càng chi tiết càng tốt mà không làm bạn chìm đắm trong thông tin. Đặt bất kỳ câu hỏi nào bạn có thể có trong các nhận xét và tìm kiếm các bài đăng chuyên sâu hơn bao gồm một số tính năng chúng tôi đã đề cập. Bạn cũng có thể đọc hướng dẫn Elaticsearch trước đây của tôi để tìm hiểu thêm Truy vấn mờ trong Elaticsearch là gì?Sửa đổi truy vấn mờ. Trả về tài liệu chứa các cụm từ tương tự với cụm từ tìm kiếm, được đo bằng khoảng cách chỉnh sửa Levenshtein . Khoảng cách chỉnh sửa là số lần thay đổi một ký tự cần thiết để biến một thuật ngữ này thành một thuật ngữ khác.
Ví dụ tìm kiếm mờ là gì?Tìm kiếm mờ giúp bạn tìm thấy kết quả có liên quan ngay cả khi cụm từ tìm kiếm bị sai chính tả. Để thực hiện tìm kiếm mờ, hãy thêm dấu ngã (~) vào cuối cụm từ tìm kiếm. Ví dụ: cụm từ tìm kiếm ngân hàng~ sẽ trả về các hàng có chứa thùng , benk hoặc ngân hàng .
Làm cách nào để truy vấn dữ liệu trong Elaticsearch?Bạn có thể sử dụng API tìm kiếm để tìm kiếm và tổng hợp dữ liệu được lưu trữ trong các luồng dữ liệu hoặc chỉ mục của Elaticsearch . Tham số nội dung yêu cầu truy vấn của API chấp nhận các truy vấn được viết trong Truy vấn DSL. Yêu cầu sau tìm kiếm my-index-000001 bằng truy vấn khớp. Truy vấn này đối sánh tài liệu với người dùng. giá trị id của kimchi.
Elaticsearch sử dụng ngôn ngữ truy vấn nào?Elasticsearch cung cấp DSL truy vấn đầy đủ (Ngôn ngữ dành riêng cho miền) dựa trên JSON để xác định truy vấn. |