2015-02-02 3 views
0

사용자 선호도 및 프로필을 고려한 elasticsearch에서 사용자 제안 시스템을 모델링하려고합니다.탄성 검색 : 좋아하는 것을 기반으로 사용자를 제안하십시오.

user: { 
    id: 232344, 
    location: 'New York', 
    likes: [4545, 3434, 343] 
} 

내가 세 가지 개념 아래를 기반으로 사용자를 제안 할 : 날 좋아

1) 사용자

는이 같은 사용자 구조를 가지고있다.

2) 내가 좋아하는 사용자가 2 명 있습니다. (유사한 위치 등)

3) 상호 좋아합니다. (사용자 x와 같은 사용자 b는 사용자 x를 좋아하고 사용자 b는 사용자 b를 추천하고 그 반대도 마찬가지입니다.)

elasticsearch에서 More like this 쿼리를 읽었지만 이러한 모든 시나리오를 고려할 수 있는지 확실하지 않습니다. .

elasticsearch 쿼리에서 어떻게 모델링 할 수 있습니까? 아니면 neo4j와 같은 그래프 데이터베이스를 사용해야합니까?

답변

1

1) 나를 좋아하는 사용자. 내 ID가 1

{ 
    "query": { 
     "term" : { "likes" : 1 } 
    } 
} 

2) more like this api를 확인이라고 가정하자. 문서 id와 일련의 필드가 주어지면 주어진 문서와 유사한 문서로 응답합니다. 다양한 옵션이 있으므로 설명서를 읽고 유스 케이스에 맞는지 확인하는 것이 좋습니다.

3) 상호 좋아요 : 내가 a이고이 사용자가 [1, 3, 5] 인 것으로 가정합니다. b도 해당 ID 중 하나를 좋아하면이 쿼리는 b을 반환합니다.

{ 
    "query": { 
     "term" : { "likes" : [1, 3, 5] } 
    } 
} 
+0

답변 해 주셔서 감사합니다. 나는 그 접근법을 좋아했다. 세 가지 쿼리를 하나로 모델링 할 수있는 방법이 있습니까? 백그라운드에서 이러한 쿼리를 실행하고 모든 정보를 redis에 저장해야하는지 결정해야합니다. 우리가 하나의 쿼리에서이를 수행 할 수 있고 여전히 실행 가능하다면 백그라운드 작업과 비교하여 쿼리를 사용하는 것이 좋습니다. –

+0

[multisearch] (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-multi-search.html#search-multi-search)를 사용하여 쿼리를 그룹화 할 수 있습니다. Elasticsearch는 3 개의 쿼리를 실행하지만 하나의 요청 만해야합니다. 이 솔루션을 찾으려면 [이 쿼리와 비슷하게 보입니다.] (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-mlt-query.html) 대신이 API를 사용하십시오. – moliware

+0

굉장! 고마워. 몇 가지 임의의 데이터로 벤치마킹하고 소요 시간을 확인합니다. –