2016-09-07 4 views
0

타사를 사용하지 않고 검색을 구현하고 싶습니다. 나의 현재 아이디어는 다른 문자열 길이를 키로 저장하여 색인이 빨리 작성되도록하는 것입니다. 최소 3 개의 문자열 길이를 구현하고 검색되는 문자열이 소문자인지 확인해야합니다. 중포 기지의 데이터에 의해 인스턴스가 다음과 같이 보일 것입니다 경우 : 그들은 동일한 검색 키를 공유합니다 검색 할 수있는 다른 일을있다, 그래서 만약더 쉽게 검색 할 수 있도록 문자열 인덱싱

{ 
    users: { 
     matUserId: { 
      name: 'Mathew' 
     } 
    }, 
    search: { 
     mat: { 
      users: { matUserId: true } 
     }, 
     ath: { 
      users: { matUserId: true } 
     }, 
     the: { 
      users: { matUserId: true } 
     }, 
     hew: { 
      users: { matUserId: true } 
     }, 
     math: { 
      users: { matUserId: true } 
     }, 
     athe: { 
      users: { matUserId: true } 
     }, 
     thew: { 
      users: { matUserId: true } 
     }, 
     mathe: { 
      users: { matUserId: true } 
     }, 
     athew: { 
      users: { matUserId: true } 
     }, 
     mathew: { 
      users: { matUserId: true } 
     }, 
    } 
} 

나는 그것을 확장했습니다. 이 기능이 작동하고 빠를 것이라고 확신합니다 (기본 구현을 통해 확인할 수 있음). 이것이 검색을 수행하는 올바른 방법인지 아니면 완전히 기반을 벗어 났는지 궁금합니다. 예를 들어 'hew'라는 단어를 검색하는 경우 자식 노드를 'hew'로 낮추면 사용자를 확보하고 표시 할 수 있습니다.

+0

올바른 검색 방법은 사용 사례에 따라 다릅니다. 그러나 이전에 답변 된대로 : Firebase Realtime Database는 전체 텍스트 검색 엔진이 아닙니다. 그것에 몇몇 FTS ​​기술을 겨루는 것이 가능하더라도, 그것은 거의 완벽하지 않습니다. 텍스트를 검색하려면 손전등 통합과 같은 전용 검색 엔진을 사용하는 것이 가장 좋습니다. –

+0

프랭크에게 항상 감사드립니다. 별도의 서버를 실행할 필요가없는 사용 가능한 도구가 있습니까? 또한 위의 제안에 많은 문제가 있습니다 (데이터가 많이있는 것을 넘어)? 매우 구체적인 유형의 기본 문자열 검색을 처리한다고 생각하지 않습니다. –

+0

이러한 권장 사항은 스택 오버플로에서 벗어난 주제이지만 Algolia에서는 좋은 결과를 얻었습니다. –

답변

0

꽤 많은 양의 데이터 세트가 생성 된 이후로 나는이 제안을 싫어했습니다. Frank van Puffelen의 Algolia 제안은 현재 무료 버전에 대한 너무 많은 데이터가 있다는 점을 제외하고는 훌륭하게 작동합니다. 나는 문자열의 시작을 통해서만 검색 할 수있는 것으로 끝내고 텍스트를 소문자로 저장하는 별도의 키를 만들었습니다. 그런 식으로 내 검색이 아주 간단한 검색어가되었습니다.

.orderByChild('searchLowerCase').startAt(query.toLowerCase()).endAt(query.toLowerCase() + "\uf8ff") 

이것은 내 필요에 맞습니다.

관련 문제