Sử dụng Dismax trong Solr 1.4.x, 3.x

1. Giới thiệu

DisMaxRequestHandler(thường được gọi ngắn gọn là Dismax) được thiết kế để xử lý các câu truy vấn đơn giản( không bao gồm các ký tự đặc biệt của Solr) mà người dùng cung cấp sau đó tìm kiếm các đơn vị từ(term) trên những trường(field) xác định với trọng số(boost) khác nhau. Thêm nữa hệ thống này còn giúp thay đổi điểm trả về dựa trên những quy tắc đặc thù cho từng use-case cụ thể.

Solr Lucene

Solr Lucene

2. Cách sử dụng

Để sử dụng có 2 cách khai báo tham số
qt=dismax sẽ sử dụng các tham số phụ khai báo trong file Solr config
defType=dismax sẽ sử dụng tham số truyền vào trên parameter của Solr
Cá nhân tôi hay sử dụng qt=dismax hơn

3. Các tham số dành cho cho dismax

q.alt

Định nghĩa câu truy vấn được sử dụng trong trường hợp câu truy vấn để trống hoặc không được chỉ ra trong tham số gửi lên server.

qf(query fields)

Danh sách các trường và các trọng số sử dụng trong các trường này trong quá trình phân tích câu truy vấn mà người dùng cung cấp.  Ví dụ sử dụng fieldOne^2.3 fieldTwo fieldThree^0.4. Chỉ ra rằng trường fieldOne có trọng số là 2.3, trường fieldTwo có trọng số mặc định là 1, trường fieldThree có trọng số là 0.4.  tức là trong trường hợp nếu nội dung câu truy vấn xuất hiện ở 3 trường thì các tài liệu có nội dung trên fieldOne quan trọng hơn tài liệu có nội dung trên fieldTwo và kém quan trọng nhất là tài liệu có nội dung trên fieldThree
Ví dụ định nghĩa qf trong Solr config:
<str name=”qf”>        CategoryName^6.0 Title^1.0     </str>

mm(Minimum ‘Should’ Match):

Trong Solr/Lucene có 3 kiểu mệnh đề là: “phải xuất hiện”, “không được xuất hiện”, và “có thể xuất hiện”(should match). Mặc định khi cung cấp một câu truy vấn Solr sẽ xử lý dạng “có thể xuất hiện” tùy thuộc vào cấu hình trong Solr config. Hoặc cũng có thể cung cấp ký tự đặc biệt để xác định đâu là mệnh đề “không được xuất hiện” đâu là mệnh đề phải xuất hiện. Khi xử lý với  mệnh đề “có thể xuất hiện” thì option “mm” sẽ chỉ ra chính xác số lượng nhỏ nhất các mệnh đề phải xuất hiện( must match).  Dưới đây là một vài ví dụ cài đặt.
– Ít nhất có 2 mệnh đề trong câu truy vấn phải xuất hiện trong tài liệu tìm được, mm=2( hoặc trong define trong Solr Config <str name=”mm”>1</str>)
– Ít nhất 75% mệnh đề phải xuất hiện, 75%
– Nếu từ 1 mệnh đề tới 2 mệnh đề thì bắt buộc phải xuất hiện tất cả. nếu từ 3 mệnh đề trở lên thì ít nhất 75% mệnh phải xuất hiện, 2<-25%
– Nếu từ 1 đến 2 mệnh đề thì bắt buộc phải xuất hiện tất cả. Nếu từ 3 mệnh đề tới 5 mệnh đề(gọi là x mệnh đề) thì x-1 mệnh đề bắt buộc phải xuất hiện. Nhiều hơn 5 mệnh đề thì ít nhất 80% mệnh đề xuất hiện.

Để rõ ràng hơn mọi người có thể tham khảo  quy tắc sử dụng cú pháp trong phần của Lucene.
http://lucene.apache.org/solr/api/org/apache/solr/util/doc-files/min-should-match.html
Nhưng có 2 điểm trái ngược giữa link trên và link
http://wiki.apache.org/solr/DisMaxQParserPlugin
Là:
1. 75% và -25%  ở Solr coi là tương đương, nhưng trong Lucene thì không phải lúc nào cũng là tương đương, do quy tắc làm tròn số khác nhau.
2. Ví dụ cuối trong Lucene khi giải thích 2<-25% 9<-3 có vẻ không hợp lý lắm

pf( Phrase Fields)

Trong danh sách trả về các document, thì tham số “pf”giúp “tăng cường trọng số” boosting cho những tài liệu nào có sự xuất hiện cả câu truy vấn trong một trường field nhất định. Định dạng của cấu hình này tương đương với định dạng tham số qf
<str name=”pf”>   CategoryName^2.0 Title^6.0     </str>
Ý nghĩ của cấu hình này như sau, với tài liệu có “toàn bộ” nội dung câu truy vấn tồn tại trong trường Title thì nhân điểm của nó lên 6.0, với tài liệu có “toàn bộ” nội dung câu truy vấn tồn tại trong CategoryName thì sẽ nhân điểm của nó lên với 2.0

ps(Pharse Slop)

Chỉ ra tham số Slop bổ trợ cho tham số pf (phrase fields).
Khái niệm này phụ thuộc vào khái niệm slop trong phrase query, Slop sẽ xác định số lượng lớn nhất các đơn vị tự (term) xuất hiện giữa 2 term của một câu truy vấn CÂU. Ví dụ với câu truy vấn “anh em”(có ngoặc kép) nếu slop xác định bằng 0 thì chỉ những văn bản có cụm từ “anh em” mới trả về. Nếu slop =1 nghĩa là văn bản chứa “anh em” hoặc “anh yêu em” hoặc “anh và em” đều thỏa mãn, còn văn bản chứa cụm từ “anh không yêu em” không phù hợp. trong trường hợp slop=2 thì các tài liệu trên đều phù hợp.

qs(Query Slop)

Định nghĩa tham số slop bổ trợ cho câu truy vấn.
Mọi người sẽ thấy conflict giữa 2 tham số này, nhưng không phải thế. qs sử dụng cho quá trình tìm kiếm tài liệu và áp dụng cho câu truy vấn chứa các mệnh đề là phrase query. Trong khi đó ps áp dụng cho quá trình boosting tài liệu(sau khi đã tìm thấy tài liệu rồi) và áp dụng cho tham số pf trình bày ở trên.

tie

Khi một đơn vị từ term được đối sánh đối với các trường khác nhau của cùng một văn bản thì có thể có nhiều trường chứa term này với các điểm khác nhau, mặc định của hệ thống Solr/Lucene sẽ sử dụng score lớn nhất trong các score để làm điểm đại diện để tính điểm cho tài liệu.
Tham số tie sẽ giúp điểm cuối cùng sẽ không phải là điểm lớn nhất mà sẽ bao gồm điểm cả các trường khác gộp lại
Max score + tie(điểm trên trường 1+điểm trên trường 2+…)

Nếu tie=0 thì trở về phương pháp tính điểm mặc định của Solr/Lucene, nếu tie=1 thì điểm sẽ là điểm tổng của các trường tìm thấy. Thực nghiệm người ta sử dụng 0.1

bq( Boost Query)

Là một câu query được thêm vào để thay đổi điểm trả về theo một chiều hướng nhất định. Mặc định hệ thống sẽ thêm câu truy vấn phụ này vào câu truy vấn chính rồi truyền xuống phía dưới.

bf(Boost Function)

Là một Function thêm vào câu truy vấn để làm thay đổi điểm của tài liệu trả về. Mọi function được hỗ trợ  bởi Solr đều có thể sử dụng được kèm theo một trọng số tương ứng.

Tham khảo http://wiki.apache.org/solr/FunctionQuery/ để biết rõ hơn về function query

Tham khảo tài liệu tiếng Anh
http://wiki.apache.org/solr/DisMaxRequestHandler
http://wiki.apache.org/solr/DisMaxQParserPlugin
http://lucene.apache.org/solr/api/org/apache/solr/util/doc-files/min-should-match.html

Nguồn: http://www.aladeck.wordpress.com

This entry was posted in Phần mềm nguồn mở, Search Engine and tagged , , , , . Bookmark the permalink.

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s