Skip to content

Commit

Permalink
= #98: Change NameStrings behaviour
Browse files Browse the repository at this point in the history
  • Loading branch information
alexander-myltsev committed Nov 18, 2016
1 parent 5a5f1e8 commit 78908c3
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class FacetedSearcher(val db: Database) extends Materializer {
import Materializer.Parameters

private val unaccent = SimpleFunction.unary[String, String]("unaccent")
private val unaccentOpt = SimpleFunction.unary[Option[String], Option[String]]("unaccent")

private val gen = UuidGenerator()

Expand Down Expand Up @@ -165,6 +166,25 @@ class FacetedSearcher(val db: Database) extends Materializer {
nameStrings.filter { ns => ns.id === exactUuid }
}

private[resolver] def resolve(name: String) = {
nameStrings.filter { ns => unaccent(ns.name) === unaccent(name) ||
(ns.canonicalUuid =!= NameStrings.emptyCanonicalUuid &&
unaccentOpt(ns.canonical) === unaccent(name))
}
}

private[resolver] def resolveWildcard(name: String) = {
if (name.length <= 3) {
nameStrings.take(0)
} else {
val nameLike = name + "%"
nameStrings.filter { ns => unaccent(ns.name).like(unaccent(nameLike)) ||
(ns.canonicalUuid =!= NameStrings.emptyCanonicalUuid &&
unaccentOpt(ns.canonical).like(unaccent(nameLike)))
}
}
}

def resolveDataSources(uuid: UUID): Future[Seq[(NameStringIndex, DataSource)]] = {
val query = for {
nsi <- nameStringIndicies
Expand Down
21 changes: 9 additions & 12 deletions resolver/src/main/scala/org/globalnames/resolver/Searcher.scala
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,17 @@ case class Searcher(db: Database, resolver: Resolver, facetedSearcher: FacetedSe
modifier match {
case CanonicalModifier if !trimmed.startsWith("x ") => capitalize(trimmed)
case NameStringModifier => capitalize(trimmed)
case NoModifier => capitalize(trimmed)
case _ => trimmed
}
}

private def resolverFunction(modifier: Modifier, wildcard: Boolean):
(String) => Query[NameStrings, NameString, Seq] = modifier match {
def resolve(value: String, modifier: Modifier, wildcard: Boolean = false,
parameters: Parameters): Future[Matches] = {
val resolverFunction: (String) => Query[NameStrings, NameString, Seq] = modifier match {
case NoModifier =>
if (wildcard) facetedSearcher.resolveWildcard
else facetedSearcher.resolve
case ExactModifier => facetedSearcher.resolveExact
case NameStringModifier =>
if (wildcard) facetedSearcher.resolveNameStringsLike
Expand All @@ -50,16 +55,8 @@ case class Searcher(db: Database, resolver: Resolver, facetedSearcher: FacetedSe
if (wildcard) facetedSearcher.resolveYearWildcard
else facetedSearcher.resolveYear
}

def resolve(value: String, modifier: Modifier, wildcard: Boolean = false,
parameters: Parameters): Future[Matches] = {
modifier match {
case NoModifier =>
resolver.resolveString(valueCleaned(value, modifier), parameters, wildcard)
case _ =>
val nameStrings = resolverFunction(modifier, wildcard)(valueCleaned(value, modifier))
nameStringsMatches(nameStrings, parameters)
}
val nameStrings = resolverFunction(valueCleaned(value, modifier))
nameStringsMatches(nameStrings, parameters)
}
}

Expand Down

0 comments on commit 78908c3

Please sign in to comment.