Vấn đề của bạn liên quan đến việc tạo ra một truy vấn boolean ưu tiên và cho loại hình này của một truy vấn phải đi sâu tìm kiếm Boolean và đến nay như thế nào tìm kiếm Boolean được thực hiện. Nói một cách đơn giản, hãy để tôi giải thích cho bạn tại sao kết quả số thứ hai của kết quả được hiển thị.
Trước tiên, hãy hiểu ý nghĩa của Boolean trong lập trình? Điều đó có nghĩa là điều kiện là đúng hoặc sai i, e 0 đến 1.
Bây giờ hãy để tôi giải thích cho tìm kiếm Boolean được thực hiện? Bạn đã đưa ra hai từ. Hãy để chúng tôi tìm kiếm hàng theo hàng trong chế độ Boolean. Công cụ tìm kiếm bắt đầu và tìm kiếm hàng theo hàng ngay bây giờ, nơi từ đầu tiên được tìm thấy, nó làm cho bản ghi đúng và cho điểm là 1 đến các hàng trong đó từ đầu tiên được tìm thấy và cũng chuẩn bị số từ tìm thấy trong hàng.
Bây giờ nó di chuyển từ tiếp theo và thực hiện quy trình tương tự cho bản ghi True và tạo danh sách các bản ghi ở bất cứ nơi nào tìm thấy từ và cũng chuẩn bị số từ tìm thấy trong hàng.
Bây giờ có hai hàng kết quả có sẵn và chúng được đặt câu lạc bộ và ưu tiên cho các từ có số lượng từ và hàng tối đa ở đây là vấn đề chính nằm.
Ví dụ
Đầu tiên >>> tổng nos. >> Thứ hai >> tổng số. >>> cuối cùng >> hàng
Lời >>> Kết quả >> Lời >>>> các từ>>> Kết quả >> không >> trả lời
1 >>>>>>>> 2 >>>>>>>> 1 >>>>>>>>> 1 >>>>>>>> 1.33 >>>> 1 >>> 1.33
0 >>>>>>>> 0> >>>>>>> 2 >>>>>>>>> 2 >>>>>>>> 1.25 >>>> 2 >>> 1.25
0 >>>>>>>> 0 >> >>>>>> 1 >>>>>>>>> 0 >>>>>>>> 1.25 >>>> 3 >>> 1
Khi gắn kết hai kết quả liệt kê khi thêm đúng với sai thì kết quả là đúng, như thể bạn thêm 1 + 0 = 1 và kết quả là shoul d với giá trị lớn hơn 1. Vì vậy, trong khi chấm điểm phù hợp với các từ tìm thấy nó luôn luôn được tìm thấy rằng công cụ tìm kiếm cho thấy kết quả mà nó tìm thấy bất kỳ từ nào.
Việc chấm điểm truy vấn liên quan được thực hiện theo hai loại hoặc bỏ qua các điểm bằng một và chỉ tính toán trên hồ sơ có điểm số lớn hơn 1. Thứ hai là thực hiện truy vấn đó mà không bao giờ hiển thị các bản ghi bằng một. Như trong trường hợp của bạn, bạn có thể để những điều dưới đây cũng để có được kết quả chính xác cho hai từ:
SELECT *, ((1.3 * (MATCH(title) AGAINST ('+term +term2' IN BOOLEAN MODE))) + (0.6 * (MATCH(text) AGAINST ('+term +term2' IN BOOLEAN MODE)))) AS score FROM results WHERE (MATCH(title, text) AGAINST ('+term +term2' IN BOOLEAN MODE)) HAVING relevance > 0 ORDER BY relevance DESC;
Tôi biết rằng việc sử dụng các từ HAVING làm cho truy vấn chút chậm nhưng không có giải pháp khác có sẵn. Hy vọng điều này sẽ giải quyết truy vấn của bạn.