검색 엔진을 구축하려면 어떻게 시작합니까? [닫은]


9

누군가 올바른 방향으로 나를 가리킬 수 있습니까? 나는 코드 작성 경험이 없지만 빠른 학습자입니다. 나는 그것이 쉬울 것이라고 말하려고하지는 않지만 누군가 나를 도울 수 있기를 바랍니다 ...


6
코드 작성 경험이 없으면 먼저 코드 작성 방법을 배우는 것이 어떻습니까? 검색 엔진을 구축하는 것은 프로그래밍에 익숙하지 않은 사람에게는 과도합니다.
Terence Ponce

3
Terence가 말했듯이 프로그래밍에 익숙하지 않은 사람들에게는 그렇지 않습니다. 전혀 좋은 검색 엔진은 상당히 복잡한 작업 인 경향이 있습니다. Google이 너무 방대한 이유가 있습니다. 매우 어려운 작업을 상당히 잘 수행합니다. 노련한 프로그래머조차도 사전 구축 된 것을 선호합니다. 당신이 원하는 것에 대해 어떤 아이디어를 주신다면, 우리는 올바른 방향으로 당신을 가리킬 수 있습니다.
Orbling

2
작은 프로젝트부터 시작하십시오. 검색 엔진을 구축하려면 엄청난 양의 코드가 필요합니다. 그리고 검색 엔진에 대한 모든 데이터를 어떻게 수집합니까? 더 많은 코드와 대규모 인프라가 필요합니다. 실제로 소규모 프로젝트부터 시작하여 작업하지 않으면 좌절 할 것입니다.
James

1
이 책은 검색 엔진의 정의와 구축 방법을 이해하는 데 도움이되었습니다. nlp.stanford.edu/IR-book
devnull

답변:


16

나는 다시 돌아 왔을 때 사용했던 블로그를 위해 이것을 썼다. .. 그것은 웹에서 더 이상 그렇게 .. 여기있다! :

검색 엔진을 작성하는 방법

probolgger.net의 Darren Rowse는 "방법"에 관한 그룹 작문 프로젝트를 진행하고 있습니다. 이것은 내가 정기적으로 읽는 몇 안되는 블로그 중 하나이므로 변경을 위해 읽을만한 가치가있는 글을 쓰지 않는 이유를 이해해야합니다.

"검색 엔진 작성 방법"을 작성하기로 결정했습니다. 두 가지 이유로이 주제를 선택했습니다.

  1. 웹에는 이것에 대한 좋은 정보가 없습니다.
  2. 나는 현재 내 고객 중 하나를 위해 글을 쓰고 있습니다.

내 고객은 상당한 규모의 온라인 소매 업체이므로 전체 웹 사이트 만, 더 구체적으로는 사이트에서 판매 할 제품 만 검색하지는 않습니다. 인터넷 검색에 사용되는 더 복잡한 기술을 작성하는 데 동일한 기술을 사용할 수는 없습니다. 나는 이것이 기술 블로그가 아니라는 것을 알고 있으므로 기술에 너무 깊이 들어 가지 않으며 하드웨어 처리 능력 요구 사항이나 웹 크롤링에 대해 논의하지 않을 것입니다.

상당히 간단한 기술을 사용하고 있으며 세 가지 필드가있는 테이블 (tblKeywords)이 있습니다.

  1. Itemid (웹 검색을하는 경우 URL이 됨)
  2. 키워드 (인덱싱 된 키워드)
  3. 가중치 (1 ~ 100 사이의 숫자 값으로이 숫자가 높을수록 키워드가 더 중요 (무게)) * PK = ItemID + 키워드

가장 먼저해야 할 일은 관련있는 어느 곳에서나 개별 단어를 수집하는 것입니다. 내 고객을 위해 제품 테이블이라는 단어를 가져옵니다. 특히 Itemid, ItemName, ItemShortDescription, ItemLongDescription, Manufacturer, ManufacturerSKU, Category1, Category2, Category3 요법 필드에서. 웹 페이지를 인덱싱하는 경우 페이지 텍스트, 페이지 제목, URL 또는 인덱싱중인 페이지로 다시 연결되는 다른 페이지의 링크에서 데이터를 가져올 수 있습니다.

가중치는 키워드의 출처에 따라 결정됩니다. 예를 들어 필자의 경우 Item Manufacture의 SKU의 가중치는 100이고 항목 이름의 단어의 가중치는 25입니다. ItemLongDescription의 단어의 가중치는 5입니다. 웹 페이지를 인덱싱하는 경우 단어 페이지 제목에서 가중치는 75가 될 수 있지만 페이지 텍스트에서 굵은 글씨로 된 단어의 가중치는 10이 될 수 있습니다. 단어가 두 번 이상 또는 여러 곳에서 반복되는 경우 매번 가중치를 추가 할 수 있습니다. 발생합니다. 예를 들어 "Shirt"라는 단어가 ItemId = 12345에 대해 두 곳에서 온 경우 ItemName (무게 25)이고 ItemLongDescription (무게 5 x2 = 10)에 두 번 나타납니다. = 12345.

어떤 사람이 "핑크 셔츠"를 검색하면 "핑크"또는 "셔츠"라는 단어의 모든 인스턴스를 테이블에서 검색하고 가중치를 계산합니다. 총 중량이 가장 높은 품목을 맨 위에 표시합니다.

SQL :

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

기본 검색 엔진이 있습니다. 물론 문장 부호 제거, HTML 코드 및 "and", "if", "or"와 같은 쓸모없는 키워드와 같이해야 할 일이 더 있습니다. 주요 구문 검색은 다루지 않지만 문구의 시작 및 끝 위치를 알아낼 수 있으면 유사한 시스템을 사용할 수 있습니다.


좋은 답변 감사합니다. 제품 그룹화를 위해 제안 할 내용 다른 웹 사이트에서 백만 개의 크롤링 된 제품 페이지가 있다는 의미입니다. 다른 웹 사이트에서 동일한 제품을 그룹화하려는 경우 : programmers.stackexchange.com/questions/134292/…
MonsterMMORPG

@Monster-상품 제조업체 \ SKU 조합은 어떻습니까?
Morons 2012


내가 그것을 얻지 못했기 때문에 좀 더 설명해 주시겠습니까? 감사합니다.
MonsterMMORPG

3
"OK"실용적인 답변. 그러나 이것은 "정보 검색"이라는 전체 연구 분야를 무시합니다. "올바른 방향을 가리킴"의 관점에서 IR은 내 마음에 더 좋았을 것이다.
Darknight

4

정보 검색 소개 의 무료 배포 초안은 주요 참조 자료가 될 것입니다. 기본 수준에서 고급 수준까지 검색 (정보 검색)을 처리합니다.


3

검색 엔진은 웹 크롤러 를 기반으로 구축되므로 웹 사이트를 개발하여 결과를 표시하기 전에 이러한 빨판 중 하나를 구축하는 방법을 찾아야합니다 (빠르고 효율적인 데이터베이스가 필요함).


3
검색 엔진은 웹 크롤러의 출력을 소비 할 수 있지만 서로 관련이 거의 없습니다. 더욱이 SQL에 대한 빠르고 효율적인 데이터베이스는 이러한 노력에 큰 도움이되지 않을 것입니다. 검색 엔진은 일반적으로 거꾸로 된 파일 인덱싱 구성표를 사용하여 구축되며 SQL 금형에는 전혀 맞지 않습니다.
Marcelo Cantos

@Marcelo Cantos : 거꾸로 된 파일 색인 생성이 복잡해 보입니다 : -0-내 답변을 명확하게 해주셔서 감사합니다!
palbakulich

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.