我建立了一个内部网站点,它遍历我们客户数据库的.csv转储,并使用表单来帮助查找帐号。
我想将所有关键字视为外卡条款,但尊重其订单。例如,如果我有公司A
:"The Monogramme Shoppe"
和公司B
:"Monograms & More at The Shop"
,我想返回A
和B
选项,如果我在表单字段中键入"mono shop"
。这段代码可以做到:
company_lookup = company_lookup.split(" ")
counter = company_lookup.length
company_lookup.each do |com|
if company.downcase.include? com.downcase
counter = counter - 1
end
end
if counter == 0
match_found = true
account_number = row[2].to_s
matches.push [account_number, company]
end
但如果我输入"mono the"
,我也会得到两个结果。在那里,我只想获得B
结果。
有没有办法使用正则表达式,比如在字符串中查找PartialKeyword1
和PartialKeyword2
,如果匹配则返回true
?
答案 0 :(得分:0)
您可以使用以下代码构造正则表达式以匹配公司名称,然后使用此正则表达式查找匹配的记录。
company_lookup = company_lookup.split(" ").map{|r| Regexp.quote(r)}.join('.*?')
if company =~ /#{company_lookup}/i
matches.push [row[2].to_s, company]
end
如果性能是一个大问题,或者数据量很大,您最好尝试一些全文搜索引擎,例如Thinking Sphinx