Python tìm kiếm mờ

Elaticsearch là công cụ tìm kiếm dựa trên nền tảng Apache Lucene. Nó cung cấp API cho việc lưu trữ và tìm kiếm dữ liệu một cách nhanh chóng. Nó được xây dựng, phát triển bằng ngôn ngữ java dựa trên Lucene – phần mềm tìm kiếm và trả về thông tin [phần mềm truy xuất thông tin] với hơn 15 năm kinh nghiệm về lập chỉ mục và tìm kiếm toàn văn. Elaticsearch được xây dựng để hoạt động như một đám mây máy chủ theo cơ chế của RESTful. Điều này giúp nó có thể tương tác và sử dụng rất nhiều ngôn ngữ , chính điều đó cũng là điểm yếu của nó khi độ bảo mật không cao

Ưu và nhược điểm của ElasticSearch, khi nào nên sử dụng?
  • ưu điểm
  1. Tìm kiếm dữ liệu rất nhanh chóng, mạnh mẽ dựa trên Apache Lucene. Tìm kiếm trong elaticsearch gần như là thời gian thực hay còn gọi là tìm kiếm gần thời gian thực
  2. Có khả năng phân tích dữ liệu [Analysis data]
  3. Lưu trữ toàn văn dữ liệu
  4. Đánh chỉ mục cho dữ liệu [tìm kiếm/lập chỉ mục gần thời gian thực, chỉ mục đảo ngược]
  5. Hỗ trợ tìm kiếm mờ [mờ], tức là từ khóa tìm kiếm có thể bị sai lỗi chính tả hoặc không đúng cú pháp thì vẫn có khả năng elaticsearch trả về kết quả tốt
  6. Hỗ trợ nhiều Elaticsearch client phổ biến như Java, PhP, Javascript, Ruby,. MẠNG, Python
  • nhược điểm
  1. Elaticsearch được thiết kế cho mục đích tìm kiếm, làm như vậy với những nhiệm vụ khác ngoài tìm kiếm như CRUD thì elastic kém hơn so với những cơ sở dữ liệu khác như Mongodb, Mysql…. Do vậy người ta ít khi sử dụng elaticsearch làm cơ sở dữ liệu chính, mà thường kết hợp nó với 1 cơ sở dữ liệu khác
  2. Trong elaticsearch không có khái niệm về giao dịch cơ sở dữ liệu , tức là nó sẽ không đảm bảo được toàn vẹn dữ liệu trong các hoạt động Viết, Cập nhật, Xóa
  3. Elaticsearch không cung cấp bất kỳ tính năng nào cho việc xác thực và phân quyền [xác thực hoặc ủy quyền]. Điều này làm cho ElaticSearch mất bảo mật với các hệ thống quản trị cơ sở dữ liệu hiện nay
  • Khi nào nên sử dụng ElasticSearch? . Search search text information – Tìm kiếm văn bản thuần túy [textual search]. 2. Search search text and data has cấu trúc – Tìm kiếm văn bản và dữ liệu có cấu trúc [tìm kiếm sản phẩm theo tên + thuộc tính]. 3. Tổng hợp dữ liệu – Tổng hợp dữ liệu. 4. Tìm kiếm theo tọa độ – Geo Search. 5. Lưu trữ dữ liệu theo định dạng JSON – Lưu trữ tài liệu JSON. 6. Phục vụ cho việc lưu trữ và phân tích dữ liệu lớn

Ai đang sử dụng Elaticsearch?

Các khái niệm cơ bản
  • cụm. tập hợp các nút chứa tất cả các dữ liệu. Mỗi cụm được định danh bằng một tên duy nhất. Mỗi cụm có một nút chính [master] được lựa chọn tự động và có thể thay thế khi gặp sự cố
  • Nút. nơi lưu trữ dữ liệu, tham gia vào công việc đánh chỉ mục của cụm cũng như thực hiện công việc tìm kiếm. Mỗi nút được định danh bằng một tên duy nhất
  • Mục lục. Là một tập hợp các tài liệu
  • Mảnh vỡ. Tập hợp các tài liệu của một chỉ mục. Một chỉ mục có thể có nhiều phân đoạn. Có hay loại shard được sử dụng là Primary Shard và Replica Shard
  • Tài liệu. a JSON object with a data number. Đây là đơn vị cơ sở dữ liệu trong Elaticsearch. Đối chiếu các khái niệm lưu trữ của Elaticsearch với một hệ thống quản trị cơ sở dữ liệu
    Cách lưu cấu trúc cơ bản của 1 cụm trong Elaticsearch
  • Elaticsearch sử dụng chỉ mục đảo ngược để đánh chỉ mục cho các tài liệu. Chỉ mục đảo ngược là một cách đánh chỉ mục dựa trên đơn vị là từ mục đích nhằm mục đích tạo mối liên kết giữa các từ và các tài liệu chứa từ đó

Cơ chế tìm kiếm

Giả sử có hai văn bản

  1. Con cáo nâu nhanh nhẹn nhảy qua thân con chó lười
  2. Quick brown foxes jump over lazy dogs in summer
    Khi tìm từ quick brown , ta chỉ cần tìm tài liệu mà thuật ngữ xuất hiện.
    Cả hai tài liệu đều khớp với kết quả tìm kiếm, nhưng có thể thấy tài liệu 1 có độ chính xác cao hơn so với tài liệu 2.
Các câu hỏi cơ bản
  • truy vấn phù hợp

Là truy vấn chuẩn để thực hiện truy vấn toàn văn. Bao gồm truy vấn kết hợp và truy vấn cụm từ hoặc gần đúng. Khớp truy vấn chấp nhận văn bản, số, ngày tháng. Truy vấn đối sánh trả về các tài liệu chứa ít nhất 1 trong các từ trong truy vấn

  • Truy vấn khớp cụm từ

Trả về các tài liệu chứa cụm từ trong truy vấn.

  • Khớp cụm từ truy vấn tiền tố

Trả về các tài liệu phù hợp với tiền tố trong truy vấn.

  • Truy vấn nhiều đối sánh

Tương tự truy vấn đối sánh nhưng cho phép tìm kiếm trên nhiều trường.

  • Kiểm soát độ chính xác

Sẽ làm gì khi người dùng đưa ra 1 truy vấn có 4 từ và cần lấy các tài liệu chứa ít nhất 3 từ trong đó. Co giãn hỗ trợ tham số minimum_nên_match của chợ, cho phép chỉ một số thuật ngữ sẽ so sánh trong tài liệu chứa các kết quả thích hợp.

  • Kết hợp truy vấn

Kết hợp các truy vấn cho phép thực hiện nhiều điều kiện trong quá trình tìm kiếm.

  • Kiểm soát phân tích

Để nâng cao hiệu quả tìm kiếm cần sử dụng các bộ phân tích phù hợp. Trình phân tích là thành phần được sử dụng để chuẩn hóa các tài liệu trong Elaticsearch. Trình phân tích thực hiện một số công việc như. Bộ lọc ký tự. Tiền xử lý chuỗi đầu vào như việc loại bỏ các thẻ html_tag hoặc biểu tượng ký hiệu & thành chữ "và". mã thông báo. Chuỗi sau khi được làm "sạch" bởi bộ lọc Chracter thì sẽ được tách ra bởi một bộ tách rời từ mã thông báo do mình chọn hoặc định nghĩa, đơn giản nhất là tách rời theo khoảng trắng hoặc dấu chấm câu, các từ được tách ra này . Bộ lọc mã thông báo Cuối cùng, mỗi thuật ngữ được thông qua bộ lọc mã thông báo [bộ lọc thẻ] để "làm mượt" thêm, ví dụ như việc chuyển các ký tự hoa về ký tự thường [chữ thường] hoặc loại bỏ các từ dừng [từ xuất hiện nhiều]

Truy vấn được phân tích bởi bộ phân tích

Tìm kiếm mờ

Fuzzy Seach [tìm kiếm "mờ"], hay còn được gọi là Tìm kiếm gần đúng [tìm kiếm "xấp xẩm"] là khái niệm chỉ dành cho kỹ thuật để tìm kiếm một xâu "gần giống" [thay vì "giống như"]

Việc áp dụng kỹ thuật Fuzzy Search giúp người dùng dễ dàng tiếp cận với nội dung hơn, khi họ có thể tìm thấy những thứ cần thiết, ngay cả khi họ không nhớ chính xác nội dung mình muốn tìm kiếm là gì

Tìm kiếm mờ trong Elaticsearch sử dụng nền tảng dựa trên khoảng cách Levenstein. Khoảng cách Levenshtein giữa chuỗi S1 và chuỗi S2 là bước ít nhất biến chuỗi S1 thành chuỗi S2 thông qua 3 biến được phép biến đổi

  • delete 1 character
  • thêm 1 ký tự
  • thay ký tự này bằng ký tự khác

Ví dụ. Khoảng cách Levenshtein giữa 2 chuỗi "kitten" và "sitting" là 3, vì phải sử dụng ít nhất 3 lần biến

kitten -> sitten [thay "k" bằng "s"]
sitten -> sittin [thay "e" bằng "i"]
sittin -> sitting [thêm ký tự "g"]

Tìm kiếm mờ trong Elaticsearch sử dụng khoảng cách Levenshtein và cho phép ta config tham số mờ để cho kết quả phù hợp nhất với nhu cầu

  • 0, 1, 2. Là khoảng cách Levenshtein lớn nhất được chấp thuận. Nghĩa là trong ví dụ nếu bạn đặt fuzziness=3 thì "cân đường" sẽ không được tìm thấy với từ khóa "con đường"
  • TỰ ĐỘNG. Sẽ tự động điều chỉnh kết quả dựa trên độ dài của thuật ngữ. Tools
0..2: bắt buộc match chính xác [khoảng cách Levenshtein lớn nhất là 0]
3..5: khoảng cách Levenshtein lớn nhất là 1
5 trở lên: khoảng cách Levenshtein lớn nhất là 2

Ví dụ truy vấn query để tìm kiếm mờ

Kết luận

Như vậy ở trên đã hướng dẫn những vẫn đề cơ bản nhất về elaticsearch, hi vọng qua bài viết này sẽ giúp người đọc hiểu thêm hoặc biết thêm một công cụ hỗ trợ việc tìm kiếm kết quả một cách nhanh chóng mà nhiều người cũng thích . Cảm ơn sự theo dõi của mọi người

Chủ Đề