2016-10-02 5 views
0

우리 모두는 페이스 북에서 그래프 검색이 있다는 것을 알고 있습니다. 사용자는 사이클링을 좋아하는 런던 출신의 사람들을 검색 할 수 있습니다. 예를 들어, 요가를 좋아하는 친구의 친구 또는 특정 달 또는 한 해의 친구 또는 남자 친구의 사진을 검색 할 수 있습니다.내 웹 사이트 내에서 검색과 같은 페이스 북 만들기

이 모든 데이터는 필터 필드가없는 단일 검색 입력에서 추출됩니다.

나는 PHP와 비슷한 것으로 시작하려하지만 어떻게 구현 될지 정확하게 말할 수 없다.

특정 데이터베이스 디자인 접근법 (간단한 RDBMS)을 통해서만 적용되는지 궁금합니다 ... 또는 키워드를 사용하여 데이터베이스 테이블에 논리적으로 링크되는 일종의 그래프 노드 구조 ... 또는 RDBMS 및 NOSQL ... 또는 다른 접근법. 텍스트 입력 자체에 관해서는, 데이터의 관련성을 얻고 적절한 쿼리 실행을 지시하기 위해 특정 키워드에 대한 해부와 일치가 있어야합니다.

웹 사이트 내에서 그룹화 된 관련 데이터가있는 소매 전자 상거래 시스템과 비슷한 점이있는 PHP 그래프 검색 (또는 적어도 유사)을 얻는 가장 좋은 방법은 무엇입니까?

+0

정확한 문구가 실제로 없기 때문에 질문이 너무 광범위합니다 (코드가 작동하지 않는 등). 그러나 당신이 찾고있는 것은 실시간 검색이라고하며 텍스트 입력을 기반으로 실시간 검색을 구현하는 데 도움이되는 많은 JS 라이브러리와 자습서가 있습니다. 데이터베이스 디자인, 테이블 조회 방법 등 많은 정보가 실시간 검색에 필요합니다. – Terry

+0

그래프 데이터베이스에 관심이 있으시면 Neo4j를 사용하여 통계를 작성하실 수 있습니다. 일부 자연어 처리가 구워졌습니다. @ 테리와 합의를 보았습니다. 이것은 적합하지 않습니다. – JNevill

+0

괜찮은 사람은 정보를 주셔서 감사합니다 :) – KAD

답변

0

각 예제를 개별적으로 해결할 수는 있지만 지루할 수도 있고 성능 측면에서 벽에 부딪 힐 수도 있습니다.

자전거 타기를 좋아하고 런던 (SQL)에서 있습니다

사람들

관계를 ('런던에서'자전거를 좋아 ', 그리고 존재의 정말 느슨한 정의를 사용하여)

SELECT users.id 
    FROM users, posts, topics, locations 
    WHERE posts.topic_id = topics.id 
     AND users.id = posts.author_id 
     AND users.location_id = locations.id 
     AND locations.city = 'London' 
     AND topics.name = 'cycling'  
GROUP BY users.id 
ORDER BY COUNT(posts.id) DESC 

데이터베이스는 특히 우아하게 많은 조인을 처리하지 않습니다. 로드 또는 대규모 데이터 세트로 인해 성능이 저하됩니다.


그러나, 그래프 데이터베이스에서 (Neo4J, 또는 TitanDB 등), 당신은 및 관련 기관의 그래프 통과하면 서비스를 제공하기위한 최적화 된 환경에서 훨씬 더 일반적인 방법으로 엔티티 대응하는 노드를 수집 할 수 있습니다 당신이 생각하고있는 유스 케이스 유형.

같은 쿼리 (사이퍼 - Neo4J는)

MATCH (topic:Topics {name:'cycling'}) 
      <-[:POST_TOPIC]-(post:Posts) 
      -[:AUTHORED_BY]->(user:Users) 
    WHERE user-[:RESIDENT_OF]->(location:Location {city:'London'}) 
    RETURN user.id AS user_id, count(post) AS post_count 
ORDER BY post_count DESC 

이들은 또한 (타이탄 및 기타 그래프 DB에 대한) 그렘린 순회으로 표현할 수 있지만, 그들은 매우 상세하고 해독하기 어려운 받기 시작.

페이스 북 스타일의 그래프 검색 관련성으로 설명하는 것에 접근하는 일반적인 방법이 있습니다. 귀하의 경우에는 맞춤 검색을 원할 것 같은데요. 검색 자의 분리 정도에 관계되는 모든 관련 정점 (위치 관계, 관심사, 친구 등 등 어떤 가장자리 관계를 사용하든). 당신은 쉽게 당신이 오늘을 구축하고자하는 모든 사용 사례를 열거 할 수없는 경우


, 당신은 아마 그래프 데이터베이스 행복 할 것이다, 그래서 당신은 당신의 아이디어를 실험하고,하지 않고 생산로를 시작할 수 있습니다 성능상의 이유로 코너를 자르십시오.

+0

좋은 소리 @ 피터 감사합니다. 어떻게 키워드를 정의했는지, 즉 자전거 타기가 주제에 대해 그리고 런던이 위치에 대해 질문을 받아야하는지 어떻게 알 수 있습니까? 데이터베이스 내의 엔티티에 키워드를 연결하는 일종의 알고리즘이 있습니까? 아니면 시행 착오의 문제입니까? – KAD

+0

그래프 거리 (검색 자와 일치하는 키워드가있는 노드 사이)로 일반적인 것을 시도 할 수 있습니다. 궁극적으로 특정 엔티티 유형을 중심으로 논리를 사용자 정의 할 수 있습니다. –

+0

아이디어가 더 명확해질 수 있도록 의견을 설명해 주실 수 있습니까? – KAD