@@ -10,6 +10,8 @@ import (
1010 "strings"
1111)
1212
13+ const leveinshtein = 0.8
14+
1315//CreateName create new name on database of type NameType
1416func CreateName (c * gin.Context ) {
1517 var name models.NameType
@@ -89,39 +91,37 @@ func SearchSimilarNames(c *gin.Context) {
8991
9092 //Name to be searched
9193 name := c .Params .ByName ("name" )
92- mtf := metaphone .Pack (name )
93-
94- database .Db .Where ("metaphone = ?" , metaphone .Pack (name )).Find (& names )
95-
96- if len (names ) == 0 {
97- c .JSON (http .StatusNotFound , gin.H {"Not found" : "metaphone not found" , "metaphone" : mtf })
98- return
99- }
94+ database .Db .Find (& names )
10095
96+ mtf := metaphone .Pack (name )
10197 var similarNames []string
10298 for _ , n := range names {
103- if metaphone .SimilarityBetweenWords (strings .ToLower (name ), strings .ToLower (n .Name )) >= 0.8 {
104- similarNames = append (similarNames , n .Name )
105- varWords := strings .Split (n .NameVariations , "|" )
106- for _ , vw := range varWords {
107- if vw != "" {
108- similarNames = append (similarNames , strings .TrimSpace (vw ))
99+ if metaphone .IsMetaphoneSimilar (mtf , n .Metaphone ) {
100+ if metaphone .SimilarityBetweenWords (strings .ToLower (name ), strings .ToLower (n .Name )) >= leveinshtein {
101+ similarNames = append (similarNames , n .Name )
102+ varWords := strings .Split (n .NameVariations , "|" )
103+ for _ , vw := range varWords {
104+ if vw != "" {
105+ similarNames = append (similarNames , strings .TrimSpace (vw ))
106+ }
109107 }
110108 }
111- }
112-
113- if len (similarNames ) == 0 {
114- similarNames = append (similarNames , n .Name )
115- varWords := strings .Split (n .NameVariations , "|" )
116- for _ , vw := range varWords {
117- if vw != "" {
118- similarNames = append (similarNames , strings .TrimSpace (vw ))
109+ if len (similarNames ) == 0 {
110+ similarNames = append (similarNames , n .Name )
111+ varWords := strings .Split (n .NameVariations , "|" )
112+ for _ , vw := range varWords {
113+ if vw != "" {
114+ similarNames = append (similarNames , strings .TrimSpace (vw ))
115+ }
119116 }
120117 }
118+ sort .Strings (similarNames )
121119 }
120+ }
122121
123- sort .Strings (similarNames )
124-
122+ if len (names ) == 0 {
123+ c .JSON (http .StatusNotFound , gin.H {"Not found" : "metaphone not found" , "metaphone" : mtf })
124+ return
125125 }
126126
127127 c .JSON (200 , gin.H {
0 commit comments