实时模糊搜索的效果不佳

时间:2019-05-22 22:01:31

标签: c# performance asp.net-web-api2 fuzzy-search

我已经使用.NET Core创建了一个Web API,并且我目前正在与一个端点争执,该端点返回与客户地址相关的相似客户地址的顶部列表作为输入。

简而言之:我有一个名为 v1 / customer / lookup 的端点,其中包含以下主体对象:

{ customerName: "Facebook Ireland Ltd.", street: "4 Grand Canal Square", city: "Dublin"} 

此实时查询使用实体框架访问Azure数据库并引用具有700k条目的表。我要的数据是客户名称,街道以及城市和街道。相同的数据在MS SQL数据库表中。 我正在使用外部库(https://nugetmusthaves.com/Package/DuoVia.FuzzyStrings)来检查数据库中是否有给定的客户名称(例如“ Facebook”)以及可以找到的匹配百分比。

例如:

Input customer name: "Facebook" -> in database "Facebook" -> 1.00 (100%)

Input customer name: "Fazebok"  -> not in database        -> 0.75 (75%)

直接匹配查找(100%)相当快,耗时200-300ms-即使列表中有70万个项目。 当我找不到直接匹配项时,我必须使用上述库对大列表中的每个项目进行检查。这使API响应大约需要15秒。 如果您需要一些代码-那不是我的主要重点。我的问题是如何改进进行解释性检查的一般方法。

以下是我尝试过的事情的简短列表:

  1. 在遍历所有700k项时,我检查了我的模糊逻辑是否已经检查了客户名称(表中有重复项,必须保留在那里)。由于查询会延长响应时间,因此使性能变得更糟。
  2. 减少了从数据库返回的列数->没有性能提高

我已经在做的是在给定时间内缓存数据库表,这样第一个请求可能会花费更长的时间,而下一个请求要快得多。

也许你们中的某人对如何实现这种实时模糊逻辑有一个一般的过程想法。听到一些想法会很高兴!

谢谢!

0 个答案:

没有答案