질문을 위해 이름> 중간 이름> 성 계층 (~ 10k 행)이 있다고 가정 해 보겠습니다. 즉, "John> Mary-Anne> Eddy"또는 "Eddy> John> Jacob"행을 가질 수 있습니다. 요점은 계층 구조가 거의 이해가되지 않으며 사용자에게 매우 외국적인 것입니다 (예 : 국가> 주> 도시 구조).3 레벨 계층 구조를 효율적으로 검색
구조가 복잡하고 혼란 스럽기 때문에 사용자에게 자동 완성 입력 상자를 제공하고 싶습니다. 그들이 입력 할 때 가능한 부분 문자열 일치를 검색해야하며, 검색 문자열이 한 레벨에서 "루트"될 때 그 결과를 그 레벨 아래로 제한합니다. "요"라는 많은 사람들이 있기 때문에 지금
는, 그것은>가 입력 한 경우 "요한은"그들은 단지
- 존> 알렌과 같은 결과를 다시 얻을 거의 의미가 알렉산더
- 존> 알렌> Burschawitz
- 존> 알렌 ... 반복 100 배 ...
그들은 고유 한 행 "제이슨> 존> 스미스"를 볼 수 없을테니까.
대신, 그들은 다시 뭔가를 얻어야한다 ("*" "이 존재 아래 이봐, 더 많이 행"의 사용자 단지 임의의 지표) :
- 존> 알렌> * 은
- 제이슨> 존> 스미스는
- 마이크> 존> *
- 마리아> 엘레나> Johnason
가 입력 한 경우 "존> 알은"다음 결과가 될 것이다 "John>"아래에있는 것으로 제한되지만 위와 마찬가지로 그룹화해야합니다.
설명이 명확 해 주시기 바랍니다. 요구 사항은 다소 느슨합니다. 사람이 나무를 수색하고 그들이 무엇을 발견 할 수 있도록 그냥 합리적인 것들.
지금 당장은 행의 검색어를 찾고 위치를 파악하고 위의 결과를 얻기 위해 일부 substring'ing, group bys 및 order by를 수행하는 재미있는 SQL을 가지고 있지만 실적이 좋지 않습니다 충분히.
전형적인 램프 스택 (Oracle 제외)에서이 문제를 해결하려고합니다. 공유 호스팅이 아니므로 서버를 완전히 제어 할 수 있습니다. 몇 주에 한 번씩 데이터가 조금씩 변경되며 합리적인 시간 동안 검색 결과가 오래 보관 될 수 있습니다 (예 : 검색 색인을 업데이트하는 cron이 문제가되지 않음).
나는 정확히 말하면, 네가하는 것을 정확히 이해할 수 없다. 네가 더 명확해질 수 있는지 나는 모른다. – 108
글쎄 ... 아마 더 나은 비유 : URL 목록이 있고 "com"을 검색했다면 domain.com/a, domain.com/b, domain.com/b를 원하지 않을 것입니다. 당신은 "domain.com/"을 원할 것입니다. 그 결과는 "other.org/Computers" –
일 수 있습니다. domain.com/a,/b,/c를 원하지 않는 이유는 다른 결과가 많이 나오기 때문입니다 지금까지는 상위 10 개 결과에 나타나지 않았습니다. –