Introduced length limits

This commit is contained in:
2019-08-31 16:52:42 +09:00
parent 9338f7bdeb
commit 3ef41b1cdd
21 changed files with 110 additions and 80 deletions

View File

@ -25,7 +25,7 @@ func AMVs(originalTerm string, maxLength int) []*arn.AMV {
text := strings.ToLower(amv.Title.Canonical)
similarity := stringutils.AdvancedStringSimilarity(term, text)
if similarity >= MinimumStringSimilarity {
if similarity >= MinStringSimilarity {
results = append(results, &Result{
obj: amv,
similarity: similarity,
@ -36,7 +36,7 @@ func AMVs(originalTerm string, maxLength int) []*arn.AMV {
text = strings.ToLower(amv.Title.Native)
similarity = stringutils.AdvancedStringSimilarity(term, text)
if similarity >= MinimumStringSimilarity {
if similarity >= MinStringSimilarity {
results = append(results, &Result{
obj: amv,
similarity: similarity,

View File

@ -1,16 +1,24 @@
package search
import (
"fmt"
"github.com/aerogo/flow"
"github.com/animenotifier/notify.moe/arn"
)
// MinimumStringSimilarity is the minimum JaroWinkler distance we accept for search results.
const MinimumStringSimilarity = 0.89
// MinStringSimilarity is the minimum JaroWinkler distance we accept for search results.
const MinStringSimilarity = 0.89
// MaxSearchTermLength defines how long the search term can be.
const MaxSearchTermLength = 100
// popularityDamping reduces the factor of popularity in search results.
const popularityDamping = 0.0009
// ErrTermTooLong is used when the search term is too long
var ErrTermTooLong = fmt.Errorf("Search term is too long (maximum %d characters)", MaxSearchTermLength)
// Result ...
type Result struct {
obj interface{}
@ -23,6 +31,10 @@ func All(term string, maxUsers, maxAnime, maxPosts, maxThreads, maxTracks, maxCh
return nil, nil, nil, nil, nil, nil, nil, nil
}
if len(term) > MaxSearchTermLength {
return nil, nil, nil, nil, nil, nil, nil, nil
}
var (
userResults []*arn.User
animeResults []*arn.Anime

View File

@ -42,7 +42,7 @@ func Anime(originalTerm string, maxLength int) []*arn.Anime {
// Canonical title
similarity := check(anime.Title.Canonical)
if similarity >= MinimumStringSimilarity {
if similarity >= MinStringSimilarity {
add(anime, similarity)
continue
}
@ -50,7 +50,7 @@ func Anime(originalTerm string, maxLength int) []*arn.Anime {
// English
similarity = check(anime.Title.English)
if similarity >= MinimumStringSimilarity {
if similarity >= MinStringSimilarity {
add(anime, similarity)
continue
}
@ -58,7 +58,7 @@ func Anime(originalTerm string, maxLength int) []*arn.Anime {
// Romaji
similarity = check(anime.Title.Romaji)
if similarity >= MinimumStringSimilarity {
if similarity >= MinStringSimilarity {
add(anime, similarity)
continue
}
@ -67,7 +67,7 @@ func Anime(originalTerm string, maxLength int) []*arn.Anime {
for _, synonym := range anime.Title.Synonyms {
similarity := check(synonym)
if similarity >= MinimumStringSimilarity {
if similarity >= MinStringSimilarity {
add(anime, similarity)
goto nextAnime
}
@ -76,7 +76,7 @@ func Anime(originalTerm string, maxLength int) []*arn.Anime {
// Japanese
similarity = check(anime.Title.Japanese)
if similarity >= MinimumStringSimilarity {
if similarity >= MinStringSimilarity {
add(anime, similarity)
continue
}

View File

@ -25,7 +25,7 @@ func Companies(originalTerm string, maxLength int) []*arn.Company {
text := strings.ToLower(stringutils.RemoveSpecialCharacters(company.Name.English))
similarity := stringutils.AdvancedStringSimilarity(term, text)
if similarity >= MinimumStringSimilarity {
if similarity >= MinStringSimilarity {
results = append(results, &Result{
obj: company,
similarity: similarity,

View File

@ -25,7 +25,7 @@ func SoundTracks(originalTerm string, maxLength int) []*arn.SoundTrack {
text := strings.ToLower(track.Title.Canonical)
similarity := stringutils.AdvancedStringSimilarity(term, text)
if similarity >= MinimumStringSimilarity {
if similarity >= MinStringSimilarity {
results = append(results, &Result{
obj: track,
similarity: similarity,
@ -36,7 +36,7 @@ func SoundTracks(originalTerm string, maxLength int) []*arn.SoundTrack {
text = strings.ToLower(track.Title.Native)
similarity = stringutils.AdvancedStringSimilarity(term, text)
if similarity >= MinimumStringSimilarity {
if similarity >= MinStringSimilarity {
results = append(results, &Result{
obj: track,
similarity: similarity,

View File

@ -23,7 +23,7 @@ func Users(originalTerm string, maxLength int) []*arn.User {
// Similarity check
similarity := stringutils.AdvancedStringSimilarity(term, text)
if similarity < MinimumStringSimilarity {
if similarity < MinStringSimilarity {
continue
}