You are on page 1of 9

(*)Multiword Queries (Truy vấn đa từ)

-Nếu full-text search chỉ có thể cho phép search 1 từ


khóa một lần thì nó sẽ trở lên thiếu linh hoạt khi sử
dụng, may thay với truy vấn match cho phép chúng
ta tạo truy vấn nhiều từ khóa một cách vô cùng đơn
giản.
- Ví dụ về Multiword Queries :
GET /my_index/my_type/_search {
"query": {
"match": {
"title": "BROWN DOG!"
}
}
}
-Với lệnh truy vấn trên chúng ta sẽ nhận được 4 tài
liệu ở phần kết quả :
{
"hits": [
{
"_id" : "4",
"_score" : 0.73185337,
"_source" : {
"title" : "Brown fox brown dog"
}
},
{
"_id" : "2",
"_score": 0.47486103,
"_source" : {
"title" : "The quick brown fox jumps over the lazy dog"
}
},
{
"_id" : "3",
"_score": 0.47486103,
"_source" : {
"title" : "The quick brown fox jumps over the quick
dog"
}
},
{
"_id" : "1",
"_score" : 0.11914785,
"_source" : {
"title" : "Brown fox brown dog"
}
}
]
}
(1) Tài liệu số 4 là tài liệu thích hợp nhất vì nó bao
gồm hai từ “brown” và một từ “dog”.
(2) Tài liệu số 2 và số 3 đều bao gồm một từ
“brown” và một từ “dog” và cả hai đều có độ dài
tiêu đề ngang nhau nên cả hai có độ thích hợp
ngang nhau.
(3) Tài liệu 1 cũng được tính là thính hợp tuy rằng
nó chỉ bao gồm từ khóa “brown” và không bao gồm
từ khóa “dog”.
- Chúng ta có kết quả như trên bởi vì phương thức
truy vấn match phải tìm kiếm 2 từ khóa là “brown”
và “dog”, điều này được thực hiện bằng cách thực
hiện hai truy vấn với mỗi từ khóa và sau đó kết hợp
kết quả có được lại để đưa ra kết quả cuối cùng . Để
làm điều này, nó kết hợp hai truy vấn từ khóa thành
một truy vấn bool, chúng ta sẽ làm rõ ý này ở phần
“Combining Queries”.
- Điều quan trọng chúng ta cần rút ra được là bất cứ
tài liệu nào mà trong tiêu đề của nó chứa ít nhất
một từ khóa đáp ứng được yêu cầu của của truy
vấn. Càng nhiều từ đáp ứng với yêu cầu của truy
vấn thì tài liệu đó sẽ càng được đánh giá là tài liệu
thích hợp cao hơn.
(*) Improving Precision (Cải thiện độ chính xác)
-Việc tìm kiếm tất cả tài liệu có bao gồm bất kỳ từ
khóa cần tìm nào sẽ dẫn đến hiện tượng kết quả
thu được sẽ bao gồm nhiều tài liệu không liên quan
đến tài liệu cần tìm.
-Nếu chúng ta muốn tìm thấy những tài liệu bao
gồm tất cả các từ khóa thì chúng ta cần sử dụng
And trong câu lệnh thay cho Or.
-Ví dụ :
GET /my_index/my_type/_search {
"query": {
"match": {
"title": {
“query” : "BROWN DOG!" ,
“operator” : “and”
}
}
}
}

-Với truy vấn này chúng ta sẽ loại đi được tài liệu 1


ở ví dụ đầu tiên, bởi vì nó chỉ chứa 1 từ khóa cần
tìm.
(*) Controlling Precision (Kiểm soát độ chính xác)
- Việc sử dụng all hoặc any trong câu lệnh truy vấn
có thể dẫn đến việc tìm kiếm của chúng ta có phần
khó khăn.
-Giả sử chúng ta sử dụng truy vấn yêu cầu bao gồm
chính xác 5 từ khóa thì những tài liệu có bao gồm ít
hơn 5 từ khóa yêu cầu sẽ bị loại bỏ ở kết quả cuối
cùng.
-Đôi khi đây chính xác là điều mà người dung muốn,
nhưng trong hầu hết trường hợp chúng ta xử dụng
full-text search, chúng ta sẽ muốn kết quả nhận
được có bao gồm cả những tài liệu có liên quan và
loại đi những tài liệu không liên quan.
-Nói cách khác chúng ta sẽ cần bổ sung thêm một số
câu lệnh để thực hiện điều này.
-Truy vấn match có hỗ trợ câu lệnh
minium_should_match, câu lệnh này cho phép bạn
đưa ra một con số cụ thể của các từ khóa mà một
tài liệu phải có để được coi là một tài liệu có liên
quan.
_Lưu ý là con số đưa ra nên được để ở dạng phần
trăm.
-VD:
GET /my_index/my_type/_search {
"query": {
"match": {
"title": {
“query” : "quick brown dog" ,
“minium_should_match” : “75%”
}
}
}
}

(*) Combining Queries (Truy vấn kết hợp)


+)Truy vấn bool ( Boolean query)
-Truy vấn bool cho phép chúng ta thực hiện nhiều
truy vấn cùng một lúc bằng cách sử dụng các lệnh
must, Must_not và should.
-Ví dụ:
GET /my_index/my_type/_search {
"query": {
"bool": {
"must": { “match” : { “title” : “quick” } },
"must_not": { “match” : { “title” : “lazy” } },
"should": [
{ “match” : { “title” : “brown” } },
{ “match” : { “title” : “dog” } }

]
}
}
}
-Kết quả thu được từ truy vấn trên sẽ bao gồm
những tài liệu có chứa từ khóa “quick” ở trong tên,
trừ những tài liệu mà tên có chứa cả từ khóa “lazy”.
-Với lệnh should thì tài liệu sẽ không bắt buộc phải
có các từ khóa “brown” và “dog” ở trong tên nhưng
nếu có thì tài liệu đấy sẽ được tính là tài liệu liên
quan.
(*) Controlling Precision (Kiểm soát độ chính xác)
-Nếu truy vấn của chúng ta không bao gồm lệnh
must hoặc must_not, thì khi đấy tài liệu cần ít nhất
đáp ứng một từ khóa ở lệnh should.
-Như với truy vấn match chúng ta có thể kiểm soát
độ chính xác của truy vấn bằng cách dung lệnh
minium_should_match, thì ở truy vấn bool chúng ta
cũng có thể sử dụng câu lệnh này để kiểm soát độ
chính xác của truy vấn bool.

You might also like