You have to differentiate, SURF itself has nothing to do with FLANN:
- SURF: is a feature descriptor. At local positions (=keypoints) in the image a descriptor (=feature vector) is computed. In case of SURF it is typically 64 bytes long.
- FLANN: is a library to match local descriptors. In contrast to BruteForce searching, you can train for a set of descriptors and later just query the trained internal structure. This makes querying extremely fast with the overhead of training the internal structure (aka dictionary / vocabulary). In the paper they basically describe how they build this internal structure and why it is fast to query it. Thus, it depends on your application when it is good to use FlannMatcher and when BruteForceMatcher.