Your textSearch field of type edgytext is based on the letter-level ngrams, i.e.
In: "bicycle"
Out: "bicy", "bicyc", "icyc", "icycl", "cycl", "cycle", "ycle"
example taken from: https://cwiki.apache.org/confluence/display/solr/Tokenizers#Tokenizers-N-GramTokenizer
This will allow for inter-token search results, that you see. If you would like to have token-level n-grams define you search field based on text_shingle. Btw, be careful with the maxShingleSize. Value 7 seems a bit too high, it will significantly contribute to the index size.