2013-07-21 4 views
8

이 질문이 Stackoverflow에서 처음으로 asked 아니지만 거의 5 년 후입니다. 시간과 기술이 약간 변경되었습니다. 요즘 사람들이 검색 엔진을 만드는 것에 대해 어떤 생각을 갖고 있는지 궁금합니다.검색 엔진을 만드는 방법? (2013 업데이트)

예를 들어, Nutch은 계속 개발되고 있습니다.하지만 여전히 가장 강력한 솔루션입니까? 다른 언어에 사용할 수있는 대체 성숙한 솔루션이 있습니까? 예 : C#, PHP, VB.NET?

또한 공개적으로 사용 가능한 대량 지수가 있으며, Common Crawl에서 자신의 스파이더 링을 수행해야 할 필요성이 줄어 듭니다.

거기에 몇 가지 사용자 정의 검색 엔진 솔루션이 있습니다. 가장 널리 알려진 것은 Google's CSE입니다.하지만 빌드를 신뢰하는 다른 주요/안정/평판이 좋은 것들은 알고 있지 않습니다. 엔진?

몇 년 전 또는 작년에 제공되지 않았던 프로그래밍 검색 엔진을 배우기 위해 현재 어떤 자료를 구할 수 있습니까?

답변

1

Udacity의의 웹 크롤러를 만들기를 통해 파이썬을 배우기에 아주 좋은 코스를 가지고, 여기를보십시오 https://www.udacity.com/course/cs101

+0

고마워요! 나는 이것을 한 번 보았지만 그것이 있었던 곳을 잊어 버렸다. – davemackey

1

내가 (처음부터 작은 검색 엔진을 쓰기에 약간의 경험을 공유하기 위해이 질문을 사용합니다 어떤 검색 관련 라이브러리는 매우 작은 데이터 세트 (실제로는 단일 서버에서 작동하기에는 너무 작거나 너무 작지 않으므로 stackoverflow를 검색합니다)에 사용됩니다. Check it out. 아래 주제에 대한 나의 발견이있다.

크롤러가

첫째, 크롤러가 할 수있는 힘든 일이다. 진짜 문제는 당신이 웹 페이지를 얻는 것처럼 빨리 디스크에 데이터를 쓰는 것입니다. 주요 데이터 구조는 역 색인이므로 "바나나"라는 단어를 얻으면 디스크에서 "바나나"색인 (문서의 위치와 함께 문서 목록)을 가져와 새 레코드를 추가해야합니다 그것을 다시 써라. 목록이 커지면 당겨서 다시 쓰는 속도가 느려집니다. 따라서 한 가지 트릭은 역 색인 (및 문서)을 파티션으로 분할하는 것입니다 (첫 번째 파티션의 1-1000 문서 등). 다른 "트릭"은 파티션을 크롤링하여 메모리에 인덱스를 유지하고 파티션이 완료 될 때만 디스크로 플러시하는 것입니다.

중요 비트 : 데이터를 저장하기 위해 무엇을 사용해야합니까? 많은 옵션이 있으며, 많은 실험을 거친 후 leveldb가 오늘날 최고의 선택이되는 것으로 나타났습니다. 그리고 SSD 디스크도 잊지 마세요!

따라서 하나의 컴퓨터 (4GB RAM)를 사용하여 이러한 방식으로 대부분의 stackoverflow (~ 13 000 000 페이지)를 크롤링하는 데 약 2 개월이 소요됩니다. 결과 데이터 (역 색인, 원시 스트립 된 텍스트 등) - 약 80GB의 디스크 공간.

검색

목표는 빠르고 높은 품질로하는 것입니다. 한 가지 알아야 할 점은, 빠른 속도를 원하면 전체 데이터 세트를 검색 할 수 없다는 것입니다. 다행스럽게도 나는 모든 항목을 분할하여 키워드가 나타나는 첫 번째 100 개의 파티션 (별도의 인덱스)을 검색하고 "충분히 좋은"결과를 발견하면 중지하지 않으면 100을 더받습니다.

가장 느린 부분은 디스크에서 색인을 읽고 그것을 비 직렬화하는 것입니다.Leveldb는 빠른 순차 읽기를 지원하므로 데이터를 순차적으로 읽을 수있는 방식으로 저장해야합니다. 메모리 세트 교차점은 꽤 빠릅니다.

이제 품질. 그것은 가장 힘들고 결코 충분하지 않습니다. 필자의 초기 시도는 텍스트뿐 아니라 제목, 링크 텍스트 및 URL에 대한 역 색인도 유지하는 것이 었습니다. 이것들에있는 모든 히트는 문서에 몇 가지 포인트를 추가합니다. 또 다른 것은 동의어를 사용하여 쿼리를 수정하고 어떤 식으로 쿼리가 가장 잘 작동했는지 확인하는 것입니다. 아마 자기 소유의 게시물 일 가치가있을거야.

어쨌든, 나는 유용한 독서가되기를 바랍니다.