ถ้าฉันต้องการสร้างเครื่องมือค้นหาฉันจะเริ่มอย่างไร [ปิด]


9

ใครสามารถชี้ให้ฉันไปในทิศทางที่ถูกต้องได้ไหม? ฉันไม่มีประสบการณ์ในการเขียนรหัส แต่ฉันเป็นผู้เรียนเร็ว ฉันไม่ได้พยายามจะบอกว่ามันจะง่าย แต่ฉันหวังว่าจะมีคนช่วยฉัน ...


6
หากคุณไม่มีประสบการณ์ในการเขียนโค้ดคุณควรเรียนรู้วิธีการเขียนรหัสก่อนอย่างไร การสร้างเสิร์ชเอนจิ้นเป็นสิ่งที่เกินความจำเป็นสำหรับผู้ที่เพิ่งเริ่มเขียนโปรแกรม
Terence Ponce

3
เทอเรนซ์พูดว่าไม่ใช่สิ่งใหม่สำหรับการเขียนโปรแกรม เสิร์ชเอนจิ้นใด ๆ ที่ทำได้ดีมีแนวโน้มที่จะเป็นงานที่ค่อนข้างซับซ้อนมีเหตุผลที่ Google มีขนาดใหญ่มากพวกเขาทำงานหนักมากดีพอสมควร แม้แต่โปรแกรมเมอร์ที่มีประสบการณ์ยังชอบที่จะใช้สิ่งที่สร้างไว้ล่วงหน้า หากคุณให้แนวคิดเกี่ยวกับสิ่งที่คุณต้องการบางทีเราอาจชี้คุณไปในทิศทางที่ถูกต้อง
Orbling

2
เริ่มต้นด้วยโครงการขนาดเล็ก การสร้างเครื่องมือค้นหาเกี่ยวข้องกับรหัสจำนวนมหาศาล และคุณรวบรวมข้อมูลทั้งหมดสำหรับเครื่องมือค้นหาของคุณอย่างไร คุณจะต้องใช้รหัสมากขึ้นและมีโครงสร้างพื้นฐานขนาดใหญ่ จริงๆโปรดเริ่มต้นในโครงการขนาดเล็กและทำงานได้ไม่นานคุณจะได้รับความผิดหวัง
James

1
หนังสือเล่มนี้ช่วยให้ฉันเข้าใจว่าเสิร์ชเอ็นจิ้น
devnull

คำตอบ:


16

ฉันเขียนสิ่งนี้สำหรับบล็อกที่ฉันเคยมีทางกลับมาเมื่อ .... มันไม่ได้อยู่บนเว็บอีกต่อไปดังนั้น .. ที่นี่เป็น! :

วิธีเขียนเครื่องมือค้นหา

Darren Rowse ไปที่ probolgger.net กำลังจัดโครงการเขียนกลุ่มในทุกสิ่งที่ "วิธีการ" นี่เป็นหนึ่งในไม่กี่บล็อกที่ฉันอ่านเป็นประจำดังนั้นฉันจึงคิดว่าทำไมไม่เขียนสิ่งที่ควรค่าแก่การเปลี่ยนแปลงแทนที่จะพูดจารุนแรงมาตรฐานที่ฉันจะจบลงด้วยการขู่ว่าจะแทง Hugo Chaves ในลำคอ

ฉันตัดสินใจเขียน "วิธีเขียนเครื่องมือค้นหา" ฉันเลือกหัวข้อนี้ด้วยเหตุผลสองประการ:

  1. ไม่มีข้อมูลที่ดีในเว็บนี้
  2. ฉันกำลังเขียนหนึ่งสำหรับลูกค้าของฉัน

ลูกค้าของฉันเป็นผู้ค้าปลีกออนไลน์ที่มีขนาดใหญ่ดังนั้นฉันไม่ได้ค้นหาทั้งเว็บเพียงแค่เว็บไซต์ของพวกเขาโดยเฉพาะอย่างยิ่งเฉพาะผลิตภัณฑ์สำหรับขายในเว็บไซต์ของพวกเขา ไม่มีเทคนิคใดที่สามารถใช้ในการเขียนที่ซับซ้อนน้อยกว่าที่ใช้ในการค้นหาอินเทอร์เน็ต ฉันรู้ว่านี่ไม่ใช่บล็อกเทคโนโลยีดังนั้นฉันจะไม่เข้าไปลึกในด้านเทคนิคมากเกินไปและฉันจะไม่พูดคุยเกี่ยวกับข้อกำหนดด้านพลังงานของฮาร์ดแวร์ \ หรือการรวบรวมข้อมูลเว็บ

ฉันใช้เทคนิคที่ค่อนข้างง่ายฉันมีตาราง (tblKeywords) ที่มีสามฟิลด์:

  1. Itemid (หากคุณทำการค้นหาเว็บจะเป็น URL)
  2. KeyWord (คำหลักที่จัดทำดัชนี)
  3. น้ำหนัก (นี่คือค่าตัวเลขตั้งแต่ 1-100 ยิ่งสูงกว่าตัวเลขนี้ยิ่งมีความสำคัญมากขึ้น (น้ำหนัก) คำหลัก) * PK = ItemID + KeyWord

สิ่งแรกที่ฉันทำคือรวบรวมคำแต่ละคำจากที่ใดก็ตามที่เกี่ยวข้อง สำหรับลูกค้าของฉันฉันจะดึงคำตารางผลิตภัณฑ์ โดยเฉพาะจากเขตข้อมูล Itemid, ItemName, ItemShortDescription, ItemLongDescription, ผู้ผลิต, ManufacturerSKU, หมวดหมู่ 1, หมวด 2, หมวดหมู่ 3, ect หากคุณกำลังจัดทำดัชนีหน้าเว็บคุณสามารถดึงข้อมูลจากข้อความหน้าชื่อหน้า URL หรือลิงค์ในหน้าอื่น ๆ ที่ลิงค์กลับไปยังหน้าที่ถูกจัดทำดัชนี

ค่าน้ำหนักจะพิจารณาจากแหล่งที่มาของคำหลัก ตัวอย่างเช่นในกรณีของฉัน SKU ของการผลิตของรายการจะได้รับน้ำหนัก 100 ในขณะที่คำจากชื่อรายการอาจได้รับน้ำหนัก 25 คำจาก ItemLongDescription อาจได้รับน้ำหนัก 5 หากคุณกำลังจัดทำดัชนีหน้าเว็บคำ จากชื่อหน้าอาจได้รับน้ำหนัก 75 ในขณะที่คำที่เป็นตัวหนาจากข้อความของหน้าอาจได้รับน้ำหนัก 10 หากคำซ้ำในมากกว่าหนึ่งครั้งหรือ \ และในมากกว่าหนึ่งสถานที่ที่คุณจะเพิ่มน้ำหนักในแต่ละครั้ง มันเกิดขึ้น. ตัวอย่างเช่นถ้าคำว่า "เสื้อเชิ้ต" มาจากสถานที่สองแห่งสำหรับ ItemId = 12345, ItemName (น้ำหนัก 25) และปรากฏสองครั้งใน ItemLongDescription (น้ำหนัก 5 x2 = 10) คำว่า "เสื้อ" จะมีน้ำหนักรวม 35 สำหรับ ItemId = 12345

หากใครบางคนทำการค้นหา "เสื้อสีชมพู" ฉันค้นหาตารางของฉันสำหรับคำทั้งหมด "สีชมพู" หรือ "เสื้อเชิ้ต" และน้ำหนักรวม แสดงรายการที่มีน้ำหนักรวมสูงสุดอยู่ด้านบน

SQL:

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

ดังนั้นที่นี่คุณมีเครื่องมือค้นหา (และรวดเร็ว) ขั้นพื้นฐาน แน่นอนว่ายังมีสิ่งที่ต้องทำอีกมากมายเช่นตัดเครื่องหมายวรรคตอนออกโค้ด HTML และคำหลักไร้ค่าเช่น "และ", "ถ้า", "หรือ" นี่ไม่ใช่การค้นหาที่อยู่สำหรับวลีที่สำคัญ แต่คุณสามารถใช้ระบบที่คล้ายกันสำหรับวลีถ้าคุณสามารถค้นหาได้ว่าพวกเขาเริ่มต้นและสิ้นสุดที่ใด


ขอบคุณคำตอบที่ดี สิ่งที่คุณจะแนะนำสำหรับการจัดกลุ่มผลิตภัณฑ์ ฉันหมายความว่าคุณมีหน้าเว็บที่รวบรวมข้อมูลได้ 1 ล้านหน้าจากเว็บไซต์ต่างๆ คุณต้องการจัดกลุ่มผลิตภัณฑ์เดียวกันในเว็บไซต์ต่างๆ: programmers.stackexchange.com/questions/134292/…
MonsterMMORPG

@Monster - วิธีการเกี่ยวกับการรวมกันของผู้ผลิต \ SKU ของรายการ?
Morons

คุณสามารถซื้อ (เช่า) ข้อมูลนี้จาก บริษัท เช่น Etilize
Morons

คุณช่วยอธิบายได้อีกเล็กน้อยเพราะฉันไม่เข้าใจ ขอบคุณ.
MonsterMMORPG

3
คำตอบที่ใช้ได้จริง "ตกลง" อย่างไรก็ตามสิ่งนี้จะไม่สนใจข้อมูลทั้งหมดของการศึกษาหรือที่เรียกว่า "การดึงข้อมูล" ในแง่ของ "การชี้ไปในทิศทางที่ถูกต้อง" IR จะดีกว่าในใจของฉัน
Darknight


3

เสิร์ชเอ็นจิ้นสร้างขึ้นจากโปรแกรมรวบรวมข้อมูลเว็บคุณจะต้องคิดหาวิธีสร้างหนึ่งในหน่อเหล่านี้ก่อนที่คุณจะสามารถพัฒนาเว็บไซต์เพื่อแสดงผลลัพธ์ (คุณต้องมีฐานข้อมูลที่รวดเร็วและมีประสิทธิภาพเพื่อไปกับมัน)


3
เสิร์ชเอ็นจิ้นอาจกินผลงานของโปรแกรมรวบรวมข้อมูลเว็บ แต่ก็มีน้อยมากที่จะทำร่วมกัน ยิ่งไปกว่านั้นฐานข้อมูล SQL ที่รวดเร็วและมีประสิทธิภาพนั้นไม่น่าจะช่วยได้มากนักในความพยายามนี้ เอ็นจิ้นการค้นหานั้นถูกสร้างขึ้นโดยใช้โครงร่างการจัดทำดัชนีไฟล์ inverted ซึ่งไม่พอดีกับราแบบ SQL เลย
Marcelo Cantos

@Marcelo Cantos: การจัดทำดัชนีไฟล์ Inverted เสียงซับซ้อน: -0 - ขอบคุณที่ช่วยอธิบายคำตอบของฉัน!
palbakulich

2

สร้างเครื่องมือค้นหา

หลักสูตรนี้เป็นหลักสูตรเบื้องต้นสำหรับ CS ที่กำลังจะเริ่มในวันที่ 20 นี้ฉันขอแนะนำให้คุณลองดูสิมันมีให้บริการฟรี


1
Sebastian Thrun ก็มีความเกี่ยวข้องกับ Google เช่นกัน
James Youngman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.