多个词的ecto模糊匹配

时间:2019-04-30 18:05:00

标签: elixir phoenix-framework ecto fuzzy-search

在我的数据库(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的结果匹配,但是我不确定如何做到这一点。

0 个答案:

没有答案