Meta-phone algorithm wrong pronunciation match?

I have a question related to Metaphone/DoubleMetaphone algorithm. I am using this in my project and very surprised to see the results, as much i know that these algorithms are designed to match the words which sounds similar in English language. I am getting same Meta-phone codes for these words : CAT GOOD GATE COT COTT which is KT . I don’t think in anyway they sound similar to each other. If i am searching for CAT in my search engine, I am getting all the remaining mentioned words as well. Please let me know guys what’s wrong with my implementation.

Below is my analyzer definition and phonetic filters. Please suggest a solution to this. I don’t want non phonetic match words to be displayed. One more confusion is if I am searching for CAT it gives me this record as well PL10 1QD , but metaphone tokens for both are different. i.e, KT for CAT & PLKT for PL10 1QD

@AnalyzerDef(name = "WithWhitespaceTokenizerFactory", tokenizer = @TokenizerDef(factory = WhitespaceTokenizerFactory.class), filters = {
                    @TokenFilterDef(factory = LowerCaseFilterFactory.class),
                    @TokenFilterDef(factory = PhoneticFilterFactory.class, params = {
                    @Parameter(name = "encoder", value = "Metaphone"), 
                    @Parameter(name = "maxCodeLength", value = "20"),
                    @Parameter(name = "inject", value = "true")

Closing as cross-post of