Skip to content

Commit e8fab37

Browse files
committed
better SearchSimilarNames
1 parent 32ecaca commit e8fab37

File tree

1 file changed

+24
-24
lines changed

1 file changed

+24
-24
lines changed

controllers/controller.go

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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
1416
func 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

Comments
 (0)