2010-09-30 36 views
9

Tôi cố gắng thiết kế ứng dụng của mình để tìm các mục nhập cơ sở dữ liệu tương tự.Tìm hàng tương tự trong cơ sở dữ liệu

Hãy ví dụ lấy bàn xe (Tất cả mọi thứ trong một bảng để giữ ví dụ đơn giản):

CarID | Car Name | Brand | Year | Top Speed | Performance | Displacement | Price 
1   Z3   BMW  1990 250   5.4   123   23456 
2   3er   BMW  2000 256   5.4   123   23000 
3   Mustang  Ford 2000 190   9.8   120   23000 

Bây giờ tôi muốn làm Queries như thế:

"Tìm kiếm xe tương tự đến Z3 (tất cả các nhãn hiệu) "(bỏ qua" Tên xe ")

Tương tự trong bối cảnh này có nghĩa là hàng có nhiều cột giống hệt nhau là giống nhau nhất.

Trong ví dụ này, nó sẽ là "3er BMW" vì 2 cột (Hiệu suất và Displacement đều giống nhau)

Bạn có thể cho tôi gợi ý làm thế nào để thiết kế các truy vấn cơ sở dữ liệu/ứng dụng như thế. Ứng dụng sẽ thực sự lớn với nhiều mục nhập.

Ngoài ra tôi thực sự sẽ đánh giá cao các liên kết hoặc sách hữu ích. (Không có vấn đề đối với tôi điều tra thêm nếu tôi biết được nơi để tìm kiếm hoặc những gì để đọc)

Trả lời

3

Bạn có thể thử để đưa ra một 'điểm' tuỳ thuộc vào lĩnh vực của mình

Bạn có thể cân nhắc điểm số của cột tùy thuộc vào mỗi bản ghi Việc so sánh tốc độ tối đa có thể quan trọng hơn thế nào (ví dụ tốc độ tối đa có thể quan trọng hơn thương hiệu)

Bạn sẽ có điểm số cho mỗi bản ghi, và bạn sẽ có thể tìm thấy các bản ghi tương tự bằng cách so sánh điểm số và tìm các bản ghi là +/- 5% (ví dụ) của bản ghi bạn đang xem

+1

Tôi có thể sử dụng chức năng 'khoảng cách' này cho từng trường để biết hai giá trị của các trường là bao xa. Điều này có thể được nhân với trọng lượng trường và các giá trị tổng hợp. Tôi đang nghĩ đến các thủ tục được lưu trữ. – aaronasterling

2

Các phương pháp tìm mối quan hệ và tương đồng trong dữ liệu được gọi là Data Mining, trong trường hợp của bạn, bạn đã có thể thử clusteringclassify dữ liệu của bạn để xem các nhóm khác nhau là gì hiển thị.

Tôi nghĩ rằng this book là một khởi đầu tốt cho giới thiệu về khai phá dữ liệu. Hi vọng điêu nay co ich.

2

Để giải quyết vấn đề của bạn, bạn phải sử dụng số cluster algorithm. Trước tiên, bạn cần xác định một chỉ số tương tự, hơn là bạn cần tính sự tương tự giữa các bộ nhập liệu (tất cả Z3) và phần còn lại của cơ sở dữ liệu. Bạn có thể tăng tốc quá trình sử dụng các thuật toán, chẳng hạn như k-means. Hãy nhìn vào câu hỏi này, ở đó bạn sẽ tìm thấy một cuộc thảo luận về vấn đề tương tự như của bạn - Finding groups of similar strings in a large set of strings.

Liên kết này rất hữu ích: http://matpalm.com/resemblance/.

Về việc triển khai nếu bạn có nhiều bộ dữ liệu (và nhiều hơn một số máy), bạn có thể sử dụng http://mahout.apache.org/. Đó là khung máy học dựa trên hadoop. Bạn sẽ cần rất nhiều sức mạnh tính toán, vì thuật toán cụm là phức tạp.

1

Không thực sự là câu trả lời cho câu hỏi của bạn, nhưng bạn cho rằng bạn có nhiều mục nhập, bạn nên cân nhắc normalizing bảng ô tô của mình, di chuyển Thương hiệu sang một bảng riêng biệt và "Tên xe"/mô hình sang một bảng riêng biệt. Điều này sẽ giảm lượng dữ liệu để so sánh trong quá trình tra cứu.

+0

Có chắc chắn. Tôi chỉ muốn có một bảng trong ví dụ. Ứng dụng của tôi không phải là về xe hơi cả. – Ben

Các vấn đề liên quan