- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
最近在MySQL中实现了Damerau-Levenshtein算法的UDF,想知道有没有办法把Damerau-Levenshtein算法的模糊匹配和Like函数的通配符搜索结合起来?如果我在表中有以下数据:
ID | Text
---------------------------------------------
1 | let's find this document
2 | let's find this docment
3 | When the book is closed
4 | The dcument is locked
我想运行一个包含 Damerau–Levenshtein 算法的查询...
select text from table where damlev('Document',tablename.text) <= 5;
...在我的查询中使用通配符匹配返回 ID 1、2 和 4。我不确定语法或者这是否可能,或者我是否必须以不同的方式处理这个问题。上面的 select 语句单独使用时效果很好,但不适用于单个单词。我必须将上面的 SQL 更改为...
select text from table where
damlev('let's find this document',tablename.text) <= 5;
...当然只返回 ID 2。我希望有一种方法可以将模糊和通配符组合在一起,如果我希望返回的所有记录都包含单词“文档”或其变体出现在文本字段。
最佳答案
在处理人名并对其进行模糊查找时,对我有用的是创建第二个单词表。还创建第三个表,它是包含文本的表和单词表之间的多对多关系的相交表。当一行添加到文本表时,您将文本拆分为单词并适本地填充相交表,在需要时将新单词添加到单词表。一旦这个结构就位,您就可以更快地进行查找,因为您只需要在唯一单词表上执行 damlev 函数。一个简单的连接就可以得到包含匹配词的文本。
单个单词匹配的查询看起来像这样:
SELECT T.* FROM Words AS W
JOIN Intersect AS I ON I.WordId = W.WordId
JOIN Text AS T ON T.TextId = I.TextId
WHERE damlev('document',W.Word) <= 5
两个词看起来像这样(从我的脑海中脱颖而出,所以可能不完全正确):
SELECT T.* FROM Text AS T
JOIN (SELECT I.TextId, COUNT(I.WordId) AS MatchCount FROM Word AS W
JOIN Intersect AS I ON I.WordId = W.WordId
WHERE damlev('john',W.Word) <= 2
OR damlev('smith',W.Word) <=2
GROUP BY I.TextId) AS Matches ON Matches.TextId = T.TextId
AND Matches.MatchCount = 2
这里的优点是,以一些数据库空间为代价,您只需将耗时的 damlev 函数应用于唯一词,无论表的大小如何,这些词的数量可能只有几千个文本。这很重要,因为 damlev UDF 不会使用索引 - 它会扫描应用它的整个表来计算每一行的值。只扫描独特的词应该快得多。另一个优点是 damlev 应用于单词级别,这似乎是您所要求的。另一个优点是您可以扩展查询以支持对多个词的搜索,并且可以通过对 TextId 上匹配的相交行进行分组来对结果进行排序,并根据匹配次数进行排序。
关于MySQL 混合 Damerau–Levenshtein Fuzzy 与 Like Wildcard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14261580/
我知道您不应该将打印与 printf,cout 和 wprintf,wcout 混合使用,但是很难找到一个好的答案,为什么以及是否可以绕过它。问题是我使用了一个用 printf 打印的外部库,而我自己
我有以下问题: class A: animal = 'gerbil' def __init__(self): self.result = self.calculate_
我在屏幕上渲染了一堆形状(多边形),我没有使用深度测试。 我只是希望这些形状在绘制在空白区域时使用自己的颜色,并且在绘制到任何非空区域时使用红色像素,即在我的情况下绘制在另一个多边形上。 这里的问题实
我正在尝试在我的 Groovy/Grails 应用程序中混入一个类,我正在使用 the syntax defined in the docs ,但我不断收到错误消息。 我有一个如下所示的域类: cla
我已经找到了 5349574673 个关于 Alpha 混合的页面,但我仍然无法获得想要的结果。我正在尝试使用 opengl 使 gif/png 文件正确显示(具有透明度/半透明度)。 这是我的初始化
我正在尝试记录以下代码,但我似乎无法让 JSDoc 记录该类,甚至无法引用它的存在。 // SomeMixin.js export default superclass => class SomeMi
我有一个类型家族,我想使用 mixin 以模块化方式“丰富”它们。例如: trait Family { self => trait Dog { def dogname:String
我在 Storyboard中有 Collection View 。我在 Storyboard中有一部分单元格,还有我以编程方式创建的部分单元格。我应该在 sizeForItemAtIndexPath
我有一个字节数组,我想更改它的访问方式。这是数组: char bytes[100]; 我想要另一个数组来改变原始数组的访问方式。如果我们可以将引用放在数组中,它看起来像这样: char& bytes_
我需要从 c 文件调用 cpp 方法。我为此编写了这个界面.. cpp文件 extern "C" void C_Test(int p){ Class::CPP_Test(p); } c文件
我的网站有两份 CSS 表,一份是主 CSS,一份是移动 CSS。问题是在移动设备(iPhone、Android)上查看时,两个样式表会混淆。例如,在 iPhone 上查看网站时,会应用主样式表中的某
维护人员的说明:此问题涉及已过时的 bokeh.charts API,该 API 已于多年前删除。有关使用现代 Bokeh 创建各种条形图的信息,请参阅: https://docs.bokeh.org
在下图中,蓝色圆圈仅用于调试目的。我的目标是蓝色圆圈后面的每一层都应该是透明的。我只想保持蓝色圆圈外面的可见。 这是用 swift 编写的代码: let croissantView = UIV
我不是 SQL 专家。我正在使用 SQL Server 2005,我正在尝试弄清楚如何构造一个查询,以便它可以满足多种要求。我有两个表定义如下: Classroom - ID - Departme
原创: 我之前问过这个问题,但我最初的例子有点不完整,我想我现在可以更具体地说明我的问题。 对于上下文,我在旧的 Apple mac 计算机上使用 openGL 3.3 并尝试渲染四边形的重叠层。每个
是否可以将内联(类似 json)映射与同一对象的常规映射定义混合使用? 考虑以下示例: person: {age: 32, weight: 82} name: foo 生成的人应具有给定的年龄、体
假设我有一个 Parent 类,它有四个字段 A、B、C 和 D,这样 C 和 D 可以选择传递或使用默认实现进行初始化: open class Parent(val a: A, val b: B,
我正在使用 symphony (1.4) 框架在 PHP 中开发一个 Web 应用程序。该代码使用 SVN 进行版本控制。在此网络应用程序中,我们所有客户共享一个共同的基础,以及一些专门为每个客户创建
我想使用两个小部件(一次一个)作为我的应用程序的基础/背景,上面有一个 QML UI 和一个无边框窗口。它应该看起来像这样: 基于 OpenGL 的扫描组件 通过窗口句柄操作的 3D 可视化组件 多个
我们有一个混合的 AngularJS/Angular 8 应用程序,并且我们不断遇到来自不同版本框架的组件之间的变化检测非常慢的问题。到目前为止,我们只在 Angular 组件中使用 AngularJ
我是一名优秀的程序员,十分优秀!