2012-03-02 2 views
2

autoscout24.de에서 검색 엔진을 구현하는 데 관심이 있습니다. 자동차를 판매/구매할 수있는 플랫폼입니다. 모든 자동차 광고는 검색 할 수있는 make, 가격, 킬로미터, 색상 등 (총 50 가지 이상의 속성) 속성을 가지고 있습니다.SQL을 사용하거나 사용하지 않고 autoscout24.de와 같은 자동차 검색을 수행하는 방법은 무엇입니까?

나는 다음과 같이 작동하는 세부 검색에 특히 관심이 있습니다. 모든 가능한 속성이 페이지에 표시됩니다. 각 속성 뒤에있는 괄호 안에는 속성을 선택한 경우 새 검색과 일치하는 자동차 수가 있습니다.

: 빈 검색 기준으로 시작하겠습니다.

속성합니다

  • BMW (100.000)
  • 폭스 바겐 (200.000)
  • 포드 (150.000)
  • ...

재산권 색상 :

  • 블랙 (210.000)
  • 은 (50.000)
  • 흰색
  • (100.000)
  • ...

등의 다른 속성.

내가 알고 싶습니다 :

  • 어떻게 SQL과 검색의이 종류를 구현하는 것이?
  • 메모리 내 데이터 구조로 구현하는 방법은 무엇입니까? 괄호 안의

    숫자는 결과의 수를 표시 의 추가 후 :

  • 범위 쿼리는

업데이트 (Y로 X의 가격으로 모든 자동차)도 지원한다 검색 조건. (예를 들어 포드를 만들기) 각

    • 는 현재 검색 기준에 모든 차량을 찾을 : 그래서 너무 순진 알고리즘은 다음과 같이 일하는 것이 각각의 속성이 제거/추가 시간 ...

      변경 property do : 이전 검색 기준 ("Ford") 및 선택한 속성에 대한 검색 기준과 일치하는 모든 자동차를 찾습니다. 재산 뒤에 괄호 안에 셈을 써라.

    이 알고리즘은 1 + N 개의 쿼리 (N = # 속성)를 실행하기 때문에 순진합니다.아무도 ;-)

  • +0

    이 웹 사이트의 데이터베이스에 액세스 할 수 있습니까? 그렇지 않다면 웹 사이트에서 _ 대용량의 데이터를 긁어 낼 계획입니까? 그들은 API를 제공합니까? 이것은 가설적인 질문입니까? – jwueller

    +0

    @elusive : 웹 사이트의 데이터베이스에 액세스 할 수 없습니다. 그리고 저는 데이터를 긁어 내고 싶지 않습니다. 비슷한 데이터베이스를 구축하고 싶지만 다른 데이터 (차가 없음)를 사용하고 싶습니다. – Marcel

    답변

    -1

    는 속성 테이블 것을해야 싶어 :

    + 속성을

    • ID
    • 제목

    에게 카운트를 필드를 사용하면 추가 쿼리를 "벌 수"있습니다. 얼마나 많은 자동차가 특정 자산을 가지고 있는지 확인하는 대신, 새 자동차를 추가 할 때이 필드를 업데이트 할 수 있습니다. 이 테이블의 행

    예 :

    1 '컬러'흑색 '흰색'1000

    2 '색상'122

    3 'km'5000 '1233

    각각의 소품에 대한

    4 'km' '30000'(54)

    그리고 차 테이블 , erty 필드를 추가하십시오.

    + 자동차

    • ID
    • 색상
    • km

    과 Properies 테이블에서 속성의 행의 ID의를 개최 색상과 km 필드.

    편집 : 당신은 MySQL의 DB를 사용하지 않을 계획이라면, 당신은 속성 데이터를 포함하는 XML 파일을 사용하는 것이 좋습니다. 그러나 다시 한 번, 자동차를 추가/제거하거나 업데이트 할 때 언제든지 count 값을 업데이트해야합니다.

    <Properties> 
    <Property> 
        <Type>Color</Type> 
        <Value>White</Value> 
        <Count>1000</Count> 
    </Property> 
    </Properties> 
    
    +0

    "업데이트"섹션을 추가했습니다. 쿼리는 매우 동적입니다. 속성 하나가 추가되면 (AND 연산자) 모든 개수가 변경됩니다. 어떻게 효율적으로 쿼리합니까? – Marcel

    +0

    자동차를 추가/업데이트/제거 할 때만 업데이트합니다. 사람들이 속성 페이지에 들어가는 횟수와 비교하면 모든 속성 중'COUNT 개를 가져와야합니다. –

    1

    나는 이것을 "faceted search"이라고합니다. Apache Solr 프로젝트는 가치가있을 것입니다.

    +0

    어휘 "faceted search"에 감사드립니다! – Marcel

    0

    은 기본 차 필터와 일치하는 경우

    • 이, 차가 모든 차 하나 하나
    • 확인이 각 속성에 대한 하나 개의 카운터와 결과 객체를 생성 코드를 다음 각 하나를 추가에게의 숫자

    ...하지만 빠른 발파입니다!

    나는 그들에 걸쳐 데이터를 shreading, 여러 컴퓨터에 그것을 할 생각합니다. 각 컴퓨터는 데이터의 5 %를 계산하고 합계를 계산하는 전면 컴퓨터로 결과를 전송합니다.

    는 도구가 있습니다, "롬"을 "탄성 검색"을 "감소 맵"을 찾아 ...

    관련 문제