在我的数据库(PostgreSQL)中,我添加了array(4) {
[0] =>
string(36) "https://www.facebook.com/bassmansdc/"
[1] =>
string(40) "https://www.instagram.com/mcbassman_sdc/"
[2] =>
string(35) "https://www.facebook.com/INDIKAMCR/"
[3] =>
string(36) "https://www.instagram.com/indikamcr/"
}
扩展名,并一直试图使用fuzzystrmatch
函数来匹配项目。当列是由多个单词组成的字符串时,我不希望这样做。
代码:
levenshtein
该代码有效(levenshtein只是带引号的查询的宏),但是我的问题在于这些项目的 def fuzzy_search(query_string, threshold \\ 4) do
query_string = query_string |> String.downcase()
query =
from item in MyApp.Item,
where:
levenshtein(item.name, ^query_string, ^threshold) or
levenshtein(item.quote, ^query_string, ^threshold),
order_by:
fragment(
"LEAST (?, ?)",
levenshtein(item.name, ^query_string),
levenshtein(item.quote, ^query_string)
)
MyApp.Repo.all(query)
end
列。诸如“ Lodestone Ammolet”之类的商品名称与“ lodestone”的搜索不匹配,因为第二个单词的区别太大。
如果我增加阈值,它将提供太多不相关的匹配项。解决此问题的最佳方法是什么?我只能想到尝试name
的名称与空格和levenshtein的结果匹配,但是我不确定如何做到这一点。