There is a closed question titled \"How does Facebook Graph Search work?\"
In simplest terms, the OP asked (and even gave a sample of what he tried):
How doe
From an implementation perspective look out for a property graph something like NoSQL based Neo4j and Lucene as the Search Engine behind the Graph Database (+ Distributed Systems). The example given by you "Friends from France who like Russia" can easily be handled by Neo4j or a custom distributed property graph solution.
Say you use Neo4j, in that case France would be a value (in a graph node) in the key-value store where say key=Country, all the outgoing edges from that node with label "likes" are to be traversed and all the destination vertex are again to be searched for England. That's it (of course the challenge here would be Search & Traversals for Big Data Distributed Graphs)!
Consider a diagramatic representation taken from Neo4j site for a property graph:
I still haven't read about Facebook Graph Search though :)