2012-09-24 6 views
2

수천 개의 서로 다른 인덱스를 사용하는 것이 좋지 않은지 궁금합니다.ElasticSearch 사용자 별 인덱스

나는 ElasticSearch를 기반으로 웹 응용 프로그램에 검색 페이지를 추가하고 있습니다. 검색 페이지를 사용하면 여러 가지 다른 색인 된 기준 (이름, 위치, 성별 등)을 필터링하여 사이트의 다른 사용자를 검색 할 수 있습니다. 이는 매우 간단하며 사이트의 모든 사용자가 문서를 포함하는 색인 ​​하나만 있으면됩니다.

그러나 사용자가 따라 다니는 다른 모든 사용자의 목록을 볼 수있는 페이지를 만들고 싶습니다. 이 페이지에 검색 페이지에서 사용할 수있는 것과 동일한 필터링 옵션이 필요합니다. 이 좋은 방법은 각 사용자에 대한 문서를 포함하는 각 사용자에 대해 별도의 인덱스를 만드는 것일 것입니다 궁금하네요?

답변

5

elasticsearch에서 수천 개의 색인을 만들 수는 있지만 사용 사례에서는 필요하지 않습니다. 하나의 색인을 사용할 수 있다고 생각합니다. 기본 사용자 레코드에 대해 child typefollowers을 추가하기 만하면됩니다. 사용자 A이 사용자 B을 따를 때마다 B의 하위 레코드를 만들고 다음 내용을 {"followed_by" : "A"}으로 지정하십시오. 현재 사용자가 따르는 사용자 목록을 얻으려면 Has Child Filter을 검색어에 추가하기 만하면됩니다.

5

작은 클러스터 (하나 또는 두 개의 노드)에서 수천 개의 색인을 만드는 것이 몇 가지 단점을 일으킬 수 있다고 Igor의 대답에 추가하고 싶습니다. 색인의 각 샤드는 완전한 Lucene 인스턴스입니다. 즉, 단일 노드 (또는 노드의 관점에서 작은 클러스터)가있는 경우 열린 파일이 많을 것입니다 (열린 파일이 너무 많음).

내가 너무 많은 인덱스를 정의하지 왜 주요 이유 중 하나입니다

...

File descriptors on installation guide

+2

우수한 점을 참조하십시오! 데이빗이 아직 당신을 납득시키지 않았다면 인덱스를 많이 사용하면 클러스터가 다시 시작되는 속도가 느려지고 사용자 데이터를 반복하면 사용자 레코드를 수정하고 삭제하는 작업이 더욱 복잡해질 것이라고 덧붙일 수 있습니다. 다른 말로하면, 당신은 많은 지표를 가질 수 있지만, 귀하의 경우에는 아마 나쁜 생각 일 것입니다. – imotov