Nếu tôi muốn xây dựng một công cụ tìm kiếm, tôi sẽ bắt đầu như thế nào? [đóng cửa]


9

Ai đó có thể chỉ cho tôi đi đúng hướng? Tôi thực sự không có kinh nghiệm viết mã nhưng tôi là người học nhanh. Tôi không cố nói điều đó sẽ dễ dàng nhưng tôi hy vọng ai đó có thể giúp tôi ...


6
Nếu bạn không có kinh nghiệm viết mã, làm thế nào về việc học cách viết mã trước? Xây dựng một công cụ tìm kiếm là một loại quá mức cần thiết cho một người mới biết lập trình.
Terence Ponce

3
Như Terence nói, nó không phải là thứ dành cho những người mới lập trình. Bất kỳ công cụ tìm kiếm nào cũng tốt đều có xu hướng là một công việc khá phức tạp, có một lý do Google rất lớn, họ làm một công việc rất khó khăn khá tốt. Ngay cả các lập trình viên dày dạn cũng có xu hướng thích sử dụng một cái gì đó được xây dựng trước. Nếu bạn đưa ra một số ý tưởng về những gì bạn muốn nó, có lẽ chúng tôi có thể chỉ cho bạn đi đúng hướng.
Orble

2
Bắt đầu với một dự án nhỏ hơn. Xây dựng một công cụ tìm kiếm liên quan đến số lượng lớn mã. Và làm thế nào để bạn thu thập tất cả dữ liệu cho công cụ tìm kiếm của bạn? Bạn sẽ cần nhiều mã hơn và cơ sở hạ tầng lớn. Thực sự, xin vui lòng bắt đầu vào các dự án nhỏ hơn và làm việc lên nếu không bạn sẽ thất vọng.
James

1
Cuốn sách này đã giúp tôi hiểu công cụ tìm kiếm là gì và chúng được xây dựng như thế nào: nlp.stanford.edu/IR-book
devnull

Câu trả lời:


16

Tôi đã viết cái này cho một blog mà tôi đã từng quay trở lại khi .... nó không còn trên web nữa nên .. đây rồi! :

Cách viết công cụ tìm kiếm

Darren Rửng tại probolgger.net đang tổ chức Dự án Viết nhóm về bất cứ điều gì "Cách thực hiện". Đây là một trong số ít các blog mà tôi đọc thường xuyên vì vậy tôi nghĩ tại sao không viết một cái gì đó đáng đọc để thay đổi, thay vào đó là câu nói bạo lực tiêu chuẩn của tôi, nơi cuối cùng tôi sẽ đe dọa sẽ đâm Hugo Chaves vào cổ họng.

Tôi quyết định viết "Cách viết công cụ tìm kiếm". Tôi chọn chủ đề này vì hai lý do:

  1. Không có nhiều thông tin tốt về điều này trên web.
  2. Tôi hiện đang viết một cho một trong những khách hàng của tôi.

Khách hàng của tôi là nhà bán lẻ trực tuyến có quy mô đáng kể, vì vậy tôi không tìm kiếm toàn bộ trang web chỉ trang web của họ, cụ thể hơn là các sản phẩm được bán trên trang web của họ. Không có kỹ thuật tương tự nào có thể được sử dụng để viết phức tạp hơn được sử dụng để tìm kiếm trên internet. Tôi biết đây không phải là một blog công nghệ vì vậy tôi sẽ không đi sâu vào các kỹ thuật, tôi cũng sẽ không thảo luận về các yêu cầu về phần cứng \ xử lý hoặc thu thập dữ liệu web.

Tôi đang sử dụng một kỹ thuật khá đơn giản, tôi có bảng (tblKeywords) với ba trường:

  1. Itemid (Nếu bạn đang thực hiện tìm kiếm trên web thì đây sẽ là URL)
  2. KeyWord (Từ khóa được lập chỉ mục)
  3. Trọng số (đây là giá trị số từ 1-100, số này càng cao thì từ khóa càng có ý nghĩa (trọng lượng)) * PK = ItemID + KeyWord

Điều đầu tiên tôi làm là thu thập các từ riêng lẻ từ bất kỳ nơi nào có liên quan. Đối với khách hàng của tôi, tôi sẽ kéo từ bảng sản phẩm. Cụ thể từ các trường Itemid, ItemName, ItemShortDes mô tả, ItemLongDes mô tả, Nhà sản xuất, Nhà sản xuất ,U1, Category1, Category2, Category3 ect. Nếu bạn đang lập chỉ mục các trang web, bạn có thể lấy dữ liệu từ văn bản trang, tiêu đề trang, URL hoặc liên kết trên các trang khác liên kết trở lại trang đang được lập chỉ mục.

Giá trị trọng lượng được xác định bởi nơi từ khóa đến từ. Ví dụ: trong trường hợp của tôi, SKU của Sản phẩm của Vật phẩm sẽ có trọng lượng 100, trong khi một từ từ Tên vật phẩm có thể có trọng số 25. Một từ trong ItemLongDes mô tả có thể có trọng số 5. ​​Nếu bạn đang lập chỉ mục các trang web từ tiêu đề trang có thể có trọng số 75 trong khi một từ in đậm từ văn bản trang có thể có trọng số 10. Nếu một từ được lặp lại nhiều lần hoặc \ và ở nhiều nơi bạn sẽ tăng trọng lượng cho mỗi lần nó xảy ra. Ví dụ: Nếu từ "Áo" xuất phát từ hai vị trí cho ItemId = 12345, ItemName (trọng lượng 25) và xuất hiện hai lần trong ItemLongDes mô tả (Trọng lượng 5 x2 = 10), từ "áo" sẽ có tổng trọng lượng 35 cho ItemId = 12345.

Nếu ai đó thực hiện tìm kiếm "áo hồng", tôi sẽ tìm kiếm bảng của mình cho tất cả các trường hợp của từ "Màu hồng" hoặc "Áo" và Tổng trọng lượng. Hiển thị các mục có tổng trọng lượng cao nhất trên đầu trang.

SQL:

Select Itemid, sum(weight) as totWeight from tblKeywords
group by itemId having keyword in ('pink','shirt')

Vì vậy, ở đây bạn có nó, một công cụ tìm kiếm cơ bản (và nhanh chóng). Tất nhiên còn nhiều việc phải làm, chẳng hạn như loại bỏ dấu câu, Mã HTML và các từ khóa vô giá trị như "và", "nếu", "hoặc". Điều này không giải quyết việc tìm kiếm các cụm từ chính, nhưng bạn có thể sử dụng một hệ thống tương tự cho các cụm từ nếu bạn có thể tìm ra nơi chúng bắt đầu và kết thúc.


cảm ơn câu trả lời tốt đẹp những gì bạn cũng sẽ đề nghị cho nhóm sản phẩm. ý tôi là bạn có 1 triệu trang sản phẩm được thu thập thông tin từ các trang web khác nhau. bạn muốn cùng một nhóm sản phẩm qua các trang web khác nhau: programmers.stackexchange.com/questions/134292/...
MonsterMMORPG

@Monster - Làm thế nào về sự kết hợp của Nhà sản xuất \ SKU?
Morons

Bạn cũng có thể mua (thuê) dữ liệu này từ các công ty như Etilize
Morons

bạn có thể giải thích thêm một chút vì tôi đã không nhận được nó. Cảm ơn bạn.
MonsterMMORPG

3
Một câu trả lời thực tế "ok". Tuy nhiên, điều này bỏ qua toàn bộ lĩnh vực nghiên cứu hay còn gọi là "Truy xuất thông tin". Về mặt "Chỉ đúng hướng" IR sẽ tốt hơn trong tâm trí tôi.
Đêm tối

3

Các công cụ tìm kiếm được xây dựng dựa trên trình thu thập dữ liệu web , bạn sẽ cần tìm ra cách xây dựng một trong những trình hút này trước khi bạn có thể phát triển trang web để hiển thị kết quả của nó (bạn sẽ cần một cơ sở dữ liệu nhanh, hiệu quả để đi cùng với nó).


3
Một công cụ tìm kiếm có thể tiêu thụ đầu ra của trình thu thập dữ liệu web, nhưng chúng có rất ít liên quan đến nhau. Hơn nữa, một cơ sở dữ liệu nhanh, hiệu quả của giống SQL không có khả năng giúp ích nhiều trong nỗ lực này. Các công cụ tìm kiếm thường được xây dựng bằng cách sử dụng các lược đồ lập chỉ mục tệp đảo ngược, hoàn toàn không phù hợp với khuôn SQL.
Marcelo Cantos

@Marcelo Cantos: Lập chỉ mục tệp đảo ngược nghe có vẻ phức tạp: -0 - Cảm ơn vì đã giúp làm rõ câu trả lời của tôi!
palbakulich


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.