1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Cơ sở dữ liệu đề tài search in depth

39 46 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Search In Depth
Thể loại Essay
Định dạng
Số trang 39
Dung lượng 409,44 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

 Internal Filter Operation Sự hoạt động bên trong của bộ lọc Find matching docs Tìm tài liệu phù hợp  Build a bitset Xây dựng tập hợp bit  Cache the bitset Lưu vào bộ nhớ cache tập h

Trang 1

Cơ sở dữ liệu

Đề tài: Search in Depth

Trang 2

Dealing with null values

Inverse document frequency Term Requency

Trang 3

I – Structured Search

1 Finding exact values

 Khi muốn tìm kiếm chính xác theo keywork thì ta nên dùng các filter trong ES, và hãy dùng các filter nhiều nhất có thể bởi các filter sẽ không phải tính relevance, tính score giữa input đầu vào và kết quả trả về Các kết quả filter trả về được cache dễ dàng trên server do đó performance tìm kiếm sẽ tốt hơn nếu dùng full-text search

 Filter quan trọng vì chúng rất nhanh Filter không tính toán mức độ liên quan (tránh toàn bộ giai đoạn tính điểm) và dễ dàng lưu vào bộ nhớ cache

 Các kết quả filter trả về được cache dễ dàng trên server do đó performance tìm kiếm sẽ tốt hơn nếu dùng full-text search

Trang 4

 Term Filter (bộ lọc thuật ngữ): là filter được sử dụng thường xuyên, nó có khả năng xử

lý numbers, Booleans, dates và text

 Term Filter with Numbers (Bộ lọc thuật ngữ với số):

Ví dụ: giả sử có một loạt các products được index trong ES:

POST /my_store/products/_bulk{"index": {"_id": 1}}

{"price": 10, "productID": "XHDK-A-1293-#fJ3"}

Trang 5

 Tìm kiếm chính xác các products có giá price = 20 sử dụng SQL:

 Dùng filter trong ES :

I – Structured Search

Trang 6

 Term Filter with Numbers (Bộ lọc thuật ngữ với số):

 Tìm kiếm sản phẩm có productID = XHDK-A-1293-#fJ3 sử dụng SQL:

 Dùng filter trong ES :

I – Structured Search

Trang 7

 Kết quả không như mong muốn do productID đã bị analyze (chuyển đổi từ dạng text sang dạng tokens of terms) bởi standard analyzer (phân tích tiêu chuẩn), ta cần phải config (đặt cấu hình) không sử dụng analyzer cho field(trường) này.

 Thay đổi mapping type cho productID để field này không được đánh index, khi đó ta có thể dung filter:

I – Structured Search

Trang 8

 Internal Filter Operation (Sự hoạt động bên trong của bộ lọc)

Find matching docs (Tìm tài liệu phù hợp)

Build a bitset (Xây dựng tập hợp bit)

Cache the bitset (Lưu vào bộ nhớ cache tập hợp các bit)

Khi thực hiện một truy vấn được lọc, bộ lọc được thực thi trước truy vấn Tập hợp bit kết quả được đưa cho truy vấn, sử dụng nó để đơn giản bỏ qua bất kỳ tài liệu nào đã bị bộ lọc loại trừ Đây là 1 trong những cách mà bộ lọc có thể cải thiện hiệu suất Ít tài liệu hơn được đánh giá bởi truy vấn có nghĩa là thời gian phản hồi nhanh hơn.

I – Structured Search

Trang 9

2 Combining Filters

 Để tìm kiếm nhiều field trên một query, có thể kết hợp nhiều filter với nhau

 Hai ví dụ trước cho thấy một bộ lọc duy nhất đang được sử dụng Trong thực tế, ta có thể sẽ cần phải lọc trên nhiều giá trị hoặc trường Ví

dụ, trong SQL:

 Trong những tình huống này, ta sẽ cần bộ lọc bool Đây là bộ lọc phức hợp chấp nhận các bộ lọc khác làm đối số, kết hợp chúng theo nhiều kiểu kết hợp Boolean khác nhau Để viết câu truy vấn trên bằng DSL, cần dùng Boolean filter

Trang 10

 must: tất cả các mệnh đề này phải phù hợp Tương đương của AND.

 must_not: tất cả các mệnh đề này không được phù hợp Tương đương của NOT.

 should: Ít nhất một trong các mệnh đề này phải khớp Tương đương của OR.

I – Structured Search

Trang 11

 Để sao chép ví dụ SQL trước, chúng ta sẽ lấy hai bộ lọc thuật ngữ mà chúng ta đã sử dụng trước đó và đặt chúng bên trong mệnh đề should của bộ lọc bool

và thêm một mệnh đề khác để xử lý điều kiện NOT:

I – Structured Search

Trang 12

 Nesting boolean filter: Mặc dù bool là một bộ lọc phức hợp và chấp nhận các bộ lọc con, nhưng điều quan trọng là phải hiểu rằng bool chỉ là một bộ lọc Điều này có nghĩa là ta có thể lồng các bộ lọc bool vào bên trong các bộ lọc bool khác, cho phép bạn tạo logic Boolean phức tạp tùy ý.

 Sử dụng truy vấn SQL:

I – Structured Search

Trang 13

 Có thể dịch nó thành một cặp bộ lọc tool lồng nhau:

I – Structured Search

Trang 14

3 Finding Multiple Exact Values

 Contain but does not equal (chứa nhưng không bằng)

 Ví dụ nếu có bộ lọc cụm từ cho {“temp”: {“tags”: “search”}}, nó sẽ khớp với cả hai tài liệu sau:

{“tags”: [“search”]}

{“tags”: [“search”, “open_source”]}

 Cách hoạt động của bộ lọc thuật ngữ: Nó kiểm tra inverted index cho tất cả các tài liệu có chứa một thuật ngữ và sau đó xây dựng một tập hợp các bit Trong ví dụ dưới đây, ta có inverted index sau:

Token DocIDs open_source 2 search 1,2

Trang 15

 Khi một bộ lọc cụm từ được thực thi để tìm kiếm token, nó sẽ chuyển thẳng đến mục nhập tương ứng trong inverted index và trích xuất các ID tài liệu được liên kết Như vậy, cả tài liệu 1 và 2 đều chứa token trong inverted index Vì thế, cả hai kết quả đều được trả về.

 Để xác định một tài liệu cụ thể chỉ chứa yêu cầu của mình, ta sẽ phải tìm thuật ngữ trong inverted index, trích xuất các ID tài liệu, sau đó quét mọi hàng trong inverted index, sau đó tìm kiếm các ID đó để xem một tài liệu có bất kỳ thuật ngữ nào khác hay không Làm như vậy sẽ cực kỳ kém hiệu quả Do đó thuật ngữ phải chứa chứ không bằng

I – Structured Search

Trang 16

 Equals Exactly (bằng chính xác)

 Sử dụng hai tài liệu bên trên, bây giờ ta bao gồm một trường duy trì số lượng thẻ:

{ "tags" : ["search"], "tag_count" : 1 }{ "tags" : ["search", "open_source"], "tag_count" : 2 }

I – Structured Search

Trang 17

 Khi đã lập index thông tin về số lượng, ta có thể tạo bộ lọc bool thực thi số lượng điều khoản thích hợp:

GET /my_index/my_type/_search {

I – Structured Search

Trang 18

4 Ranges

 Trong SQL, một phạm vi được biểu thị như sau:

SELECT document FROM products WHERE price BETWEEN 20 AND 40

 Trong ES, một phạm vi biểu thị như sau:

"range" : {

"price" : {

"gt" : 20,

"lt" : 40 }

}

Trang 19

 Bộ lọc phạm vi hỗ trợ cả phạm vi bao gồm và phạm vi riêng, thông qua sự kết hợp của các tùy chọn sau:

 gt: > lớn hơn

 lt: < nhỏ hơn

 gte: >= lớn hơn hoặc bằng

 lte: <= nhỏ hơn hoặc bằng

 Nếu bạn muốn một phạm vi không giới hạn, cần bỏ đi một ranh giới Ví dụ >20:

"range" : {

"price" : {

"gt" : 20 }

}

 Bộ lọc phạm vi cũng có thể hoạt động trên các trường ngày và trường chuỗi.

I – Structured Search

Trang 20

5 Dealing with null values

 Nếu một trường không có giá trị, nó sẽ không được lưu trữ Hãy xem inverted index từ phần trước:

Token DocIDs open_source 2 search 1,2

 Ta không thể lưu trữ một trường không tồn tại trong cấu trúc dữ liệu Inverted index chỉ đơn giản là một danh sách các token và các tài liệu chứa chúng Nếu một trường không tồn tại thì trường đó không chứa bất kỳ mã thông báo nào, điều đó có nghĩa là nó sẽ không được thể hiện trong cấu trúc dữ liệu inverted index

 Để xử lý vấn đề này, Elasticsearch có một số công cụ để làm việc với các giá trị rỗng hoặc bị thiếu

Trang 21

 Exists filter (bộ lọc tồn tại)

 Bộ lọc này sẽ trả về các tài liệu có bất kỳ giá trị nào trong trường được chỉ định Hãy sử dụng ví dụ gắn thẻ và lập index một số tài liệu mẫu:

POST /my_index/posts/_bulk{"index": {"_id": "1"}}

{"tags": ["search"]}1{"index": {"_id": "2"}}

{"tags": ["search", "open_source"]}2{"index": {"_id": "3"}}

{"other_field": "some data"}3{"index": {"_id": "4"}}

{"tags": null}4{"index": {"_id": "5"}}

{"tags": ["search", null]}5

I – Structured Search

Trang 22

 Kết quả của inverted index cho trường thẻ sẽ giống như sau:

Token DocIDsopen_source 2search 1,2,5

 Trong Elasticsearch, ta sử dụng bộ lọc tồn tại:

GET /my_index/posts/_search{

}

I – Structured Search

Trang 23

 Truy vấn trả về ba tài liệu:

Trang 24

 Missing Filter (bộ lọc thiếu)

 Bộ lọc thiếu về cơ bản là nghịch đảo của tồn tại: nó trả về các tài liệu không có giá trị cho một trường cụ thể.

 Hoán đổi bộ lọc hiện có cho một bộ lọc thiếu từ ví dụ trước:

GET /my_index/posts/_search {

}

I – Structured Search

Trang 25

 Ta lấy lại được hai tài liệu không có giá trị thực trong trường tags — tài liệu 3 và 4:

"hits": [ { "_id": "3",

 Nó phù hợp với loại trường Không thể sử dụng chuỗi null_value trong trường loại ngày

 Nó khác với các giá trị bình thường mà trường có thể chứa, để tránh nhầm lẫn

 giá trị thực với giá trị null.

I – Structured Search

Trang 26

 Các kết quả trong quá trình phân tích được lưu trữ ở trong inverted index - gọi là chỉ số đảo ngược.

 Một Inverted index chứa danh sách từng từ đơn duy nhất (unique work) xuất hiện trong bất kỳ một document nào được bao phủ bởi index, ứng với mỗi từ đó sẽ là một danh sách các document mà từ này xuất hiện (mapping) được lưu trữ Vì vậy, về cơ bản, một inverted index là một ánh xạ giữa các điều khoản và tài liệu nào chứa các điều khoản đó Vì một inverted index hoạt động ở cấp trường tài liệu và lưu trữ các thuật ngữ cho một trường nhất định, nên nó không cần phải xử lý các trường khác nhau

II – Inverted Index

Trang 27

Ví dụ: Giả sử rằng chúng ta có hai công thức nấu ăn với các tiêu đề sau: “The Best Pasta Recipe with Pesto” và “Delicious Pasta Carbonara Recipe” Bảng sau đây cho thấy inverted index sẽ như thế nào.

II – Inverted Index

Trang 28

 Bước đầu tiên của truy vấn tìm kiếm là tìm tài liệu khớp với truy vấn ở vị trí đầu tiên Vì vậy, nếu chúng ta tìm kiếm "pasta recipe", thì ta sẽ thấy rằng cả hai tài liệu đều chứa cả hai thuật ngữ.

II – Inverted Index

Trang 29

 Nếu chúng ta tìm kiếm theo thuật ngữ “delicious recipe” thì kết quả sẽ như sau:

II – Inverted Index

Trang 30

 Tóm lại: Một bộ phân tích được áp dụng cho các trường toàn văn bản và kết quả của quá trình phân tích này được lưu trữ trong một inverted index Một inverted index bao gồm tất cả các điều khoản cho một trường nhất định trên tất cả các tài liệu trong một index

 Vì vậy, khi thực hiện một truy vấn tìm kiếm, ta không thực sự tự tìm kiếm các tài liệu, mà là một inverted index Điều này rất quan trọng để hiểu bởi vì nếu không, có thể bị bối rối về lý do tại sao một số truy vấn không phù hợp với những gì mong đợi

II – Inverted Index

Trang 31

 Là thuật toán toán mà chúng ta sử dụng để tính toán mức độ tương tự nội dung của một trường văn bản với một chuỗi truy vấn toàn văn bản (full – text)

 The relevance score của mỗi tài liệu được biểu diễn bởi một số thực dấu phẩy động dương được gọi là the_score The_score càng cao thì tại liệu càng liên quan

 The_score càng cao thì tại liệu càng liên quan (relevance)

 Một mệnh đề truy vấn tạo ra một the_score cho mỗi tài liệu Do đó cách tính score phụ thuộc vào loại mệnh đề truy vấn

III – Relevance

Trang 32

 Thuật toán tương tự tiêu chuẩn được sử dụng trong Elasticsearch:

 Term frequency (TF)

 Inverse document frequency (IDF)

III – Relevance

Trang 33

 Term frequency

III – Relevance

Trang 34

 search với từ khoá "quick

{ "title": "The quick brown fox jumps over the quick dog" }

{ "title": "The quick brown fox" }

TF được tính theo công thức sau:

tf(t, d) = √frequency

 term frequency (tf) của t trong document d được tính bằng căn bậc hai của số lần t xuất hiện trong d

III – Relevance

Trang 35

Từ khoá ít xuất hiện hơn (“lẩu") sẽ cho relevance cao hơn là từ khoá xuất hiện nhiều hơn (“lẩu hải sản tôm hùm") trên toàn bộ index Mặc dù vậy, kết quả trên không có nghĩa là từ khoá "" tốt hơn từ khoá “lẩu“

Trang 36

 Inverse document frequency (IDF)

 Inverse document frequency (idf) của t là logarit cơ số e (logarit tự nhiên) của thương giữa tổng số documents trong index và

số documents xuất hiện t (giá trị công thêm 1 ở đây để tránh xảy ra lỗi Division by zero)

 IDF được đánh giá theo công thức sau:

idf(t) = 1 + log (numDocs / (docFreq + 1))

III – Relevance

Trang 37

 Công thức: norm(d) = 1 / √numTerms

Giải thích: field-length norm (norm) là nghịch đảo của căn bậc hai số lượng term trong field (có thể hiểu là số lượng chữ của field đó)

 Các truy vấn đơn có thể kết hợp TF/IDF score với các yếu tố khác như sự xấp xỉ của term trong phrase queries (truy vấn cụm từ ) , hoặc sự giống nhau về term trong truy vấn mờ

 Relevance(độ liên quan) không chỉ là tìm kiếm toàn văn (full-text search) mà nó hoàn toàn có thể áp dụng cho mệnh đề có hoặc không, càng nhiều mệnh đề chính xác the_score càng cao

 Khi nhiều mệnh đề truy vấn được kết hợp bằng cách sử dụng phép truy vấn ghép như là bool query, the_score cho mỗi mệnh đề truy vấn được kết hợp được tính toán là over_all_score ( tổng điểm ) cho tài liệu

III – Relevance

Trang 38

_score cuối cùng sẽ là tích của TF, IDF và Field-length norm giá trị trên:

IDF score * TF score * fieldNorms

hay

log(numDocs / (docFreq + 1)) * √frequency * (1 / √numTerms)

III – Relevance

Trang 39

Cảm ơn thầy và các bạn đã chú ý lắng nghe!!!

Ngày đăng: 14/09/2021, 19:10

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w