【问题标题】:Search Medicine name in pharma industry with few characters from each word in a lengthy medicine name在制药行业中搜索药物名称,在冗长的药物名称中从每个单词中提取几个字符
【发布时间】:2020-02-09 13:21:14
【问题描述】:

产品名称:

  1. 阿莫西林混悬液 250MG/5ML 100ML
  2. 阿莫新 SUSP 500MG/5ML 100ML

客户的需求是他们搜索产品时喜欢

  • “amoxi”或“amo susp”或“amox susp”或“amo sus 250 100”
  • 100 250 sus amo 或 amox susp**

当我将参数amox susp 发送到存储过程时,结果将是上述两个产品,因为它们都包含此数据。

我们需要显示所有类似的产品名称,例如“amoxilin 10mg”或“amoxilin 30mg”。基本上,如果产品名称太长,他将使用同一产品中不同单词中的几个字符来搜索单词。有时甚至反向也应该像 b 点中提到的那样工作。寻找实现这一目标的输入。

想在不使用全文搜索和索引的情况下实现这一点。

【问题讨论】:

  • 所有文字都是必填的?
  • @FDavidov - 没找到你
  • 您最好将这些值作为表变量传递,而不是作为(空格?)分隔列表。尤其是当 SQL Server 2008(完全不受支持)没有内置方式拆分值时。
  • @TheImpaler - 正如我提到的,没有使用全文搜索
  • 为什么不想使用专为这些类型的查询而设计的全文搜索?您为什么使用不受支持的 SQL Server 版本?

标签: sql sql-server sql-server-2008


【解决方案1】:

在不使用全文搜索的情况下执行此搜索的最简单有效的方法是 (1) 使用过程中的逻辑将参数拆分为“单词”,然后 (2) 使用 LIKE 和 @ 执行搜索987654322@.

例如,如果您有参数100 250 sus amo,您可以将其拆分为:

  • 100
  • 250
  • sus
  • 阿莫

那么查询是:

select *
from t
where lower(description) like lower('%100%')
   or lower(description) like lower('%250%')
   or lower(description) like lower('%sus%')
   or lower(description) like lower('%amo%')

【讨论】:

  • 还有一点是药名以amox(amox 100 250)或amox(amox tab 100ml)或amox(amox sub 2kg)开头,即第一个要搜索的词是必填的我的意思是第一个词是医学的起点
猜你喜欢
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多