狮身人面像和“你的意思是……?”建议想法。它会起作用吗?

2023-11-25

我正在尝试想出最快的方法来提出搜索建议。起初我认为 Levenstein UDF 函数与 mysql 表相结合就可以完成这项工作。但是使用 levenshtein,mysql 必须遍历表中的每一行(大量的单词),这会使查询非常慢。

现在我最近安装并开始使用Sphinx(http://sphinxsearch.com/)用于全文搜索,主要是因为它的性能以及 mysql 与 SphinxSE 的紧密集成。

所以我问自己是否可以使用 sphinx 实现一种“你的意思是”算法来以某种方式提高性能,我想我找到了一个简单的算法。 基本上我采取了所有我想要纠正的关键字,在每个字母之间放置一个空格,然后将其放入 sphinx 索引中。如果这个词是“关键词”,它就变成“关键词”。现在,当用户输入一个单词时,我将其拆分为字母,并在 sphinx 索引中搜索与所提供的任何字母相匹配的记录(我只需要一个)。最好的部分是 sphinx 非常擅长计算匹配行的相关性(权重),因此最佳匹配始终具有最大的权重(我认为)。它还考虑了单词(在我的例子中是字母)的位置,因此最佳匹配将按该顺序排列。

通过 sphinx 查询,我在关键字列表中获得了最相似的单词。然后我用 php 使用扩展的 Levenshtain 距离来检查它,该距离解释了重​​新排列的字母https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance。如果字符串距离小于 2(并且!= 0),则建议该单词。否则不要建议任何事情。

我的想法有问题吗?有什么我没想到的吗? sphinx 查询是否会出现任何预期的故障,以及 sphinx 相关性计算是否会出现无法给出最佳匹配的怪癖?如果我有什么地方弄错了,请纠正我。


我看不出你的想法有什么问题。大胆试试吧。只是指出,只有当您想覆盖与 LD 非常相似的内置行为时,您的方法才相关。

例如,对于 sphinx 1.10-beta,您可以指定 min_infix_len 和 Expand_keywords 并使用 sphinx 的内置加权方法(BM25 和一些专有代码)以获得良好的结果。http://sphinxsearch.com/blog/2010/08/17/how-sphinx-relevance-ranking-works/

不要忘记对这些查询进行内存缓存,并创建一个预热脚本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

狮身人面像和“你的意思是……?”建议想法。它会起作用吗? 的相关文章

  • MYSQL 从表中选择,获取表中最新/最后 10 行

    最好 最简单的方法是什么 我目前的查询是 SELECT FROM chat WHERE userID session AND toID friendID OR userID friendID AND toID session ORDER B
  • 如何调试 MySQL 存储过程?

    我当前的调试存储过程的过程非常简单 我创建一个名为 debug 的表 在存储过程运行时从其中插入变量值 这允许我查看脚本中给定点的任何变量的值 但是有没有更好的方法来调试 MySQL 存储过程 下列debug msg可以调用过程来简单地将调
  • “for”SQL Server 附近的语法不正确

    我想向其中已有数据的现有表添加一个新列 该列应该不为空 因此我想设置一个默认值 但是当我这样做时 它会抛出以下异常 for 附近的语法不正确 ALTER TABLE Semester ADD SIDNew uniqueidentifier
  • 如何获取与值匹配或存在于另一个表中的记录?

    我试图弄清楚在这种情况下如何获取所有任务 其中两个字段等于某个值或者它们存在于另一个表中 这是查询 SELECT TASKS task id TASKS task title TASKS task description TASKS tas
  • 这个 SQL DELETE FROM 语法有什么问题?

    我正在尝试删除 96k 记录 删除表 xoops bb posts text 页面中没有与 xoops bb posts 匹配的 post id 的所有记录 此查询返回 91k 条记录 SELECT FROM xoops bb posts
  • MySQL SELECT 输出同一行中每个 id 的下一个日期

    我查询的表结构如下 ID Date Before value After value 1 2014 04 25 Win Loss 1 2014 04 30 Loss Win 1 2014 08 18 Win Loss 1 2014 08 2
  • MYSQL 查询返回“资源 id#12”而不是它应返回的数值

    不知道为什么 但这返回了错误的值 我正在取回此资源 ID 12 而不是我正在寻找的数值 1 执行此操作的代码是 type SELECT account type from user attribs WHERE username userna
  • 使用唯一索引删除重复项

    我在两个表字段 A B C D 之间插入 相信我已经在 A B C D 上创建了唯一索引以防止重复 然而我以某种方式简单地对这些做了一个正常的索引 因此插入了重复项 这是2000万条记录的表 如果我将现有索引从普通索引更改为唯一索引 或者只
  • 在docker中使用MySQL数据库设置aspnetcore

    我正在尝试设置一个 docker compose 文件 其中包含 asp net core mysql 数据库和 phpmyadmin 的容器 设置我的 mysql 服务器没有问题 我可以使用 phpmyadmin 访问它 我的 asp n
  • 如何安装 python-Levenshtein windows

    我看到有人问了一个关于在 python 中安装 levenshtein 的类似问题 但另一个用户指示我启动自己的问题 所以就这样了 我运行的是 Windows 8 64 位 当我尝试安装 Levenshtein 时 出现以下错误 C Pyt
  • 使用按位函数查询 BIT 字段时,MySQL 不使用索引

    我的 MySQL 表中有一个 BIT 类型的字段 我想使用位值存储记录的状态 例如 1 status1 2 status2 4 status3 8 status4 每条记录可以同时具有多种状态 对于 status1 和 status3 该值
  • 如何将 MySQL 数据库更改为 UTC?

    我使用的是 Windows 7 对数据库方面的东西有点陌生 我尝试在 Google 上搜索如何将系统时区更改为 UTC 但文档有些高级 我不太确定如何更改此字段 在 my ini 文件的 mysqld 部分下 添加以下行 default t
  • MySQL 存储过程将值分配给 select 语句中的多个变量

    这是我的存储过程 我在为声明的变量赋值时遇到问题 当我执行它时 插入和更新命令工作正常 但声明变量的值保持为 0 但我在数据库中有一些价值 我怎样才能正确地做到这一点 BEGIN DECLARE PaidFee INT DEFAULT 0
  • 当“修复表”查询在 mysql 中不起作用时该怎么办?

    我收到此错误 表的存储引擎不支持修复 当我尝试使用查询修复表时repair table tbl college master 表是 innodb 类型 但我不知道我收到此错误 See 手册 http dev mysql com doc re
  • 对于数据库来说,选择正确的数据类型会影响性能吗?

    如果是这样 为什么 我的意思是 tinyint 的搜索速度比 int 快吗 如果是这样 性能上的实际差异是什么 是的 根据数据类型 它确实有所不同 int vs tinyint不会在速度上产生明显的差异 但会在数据大小上产生差异 假设tin
  • 显示表 FULLTEXT 索引列

    我希望运行一个查询 该查询将返回表中全文索引的列列表 该表采用 MyISAM 格式 我将使用 php 来构建查询 理想情况下 我会运行查询 它会返回信息 以便我可以构造一个以逗号分隔的列字符串 例如 名 姓 电子邮箱 这在 MySQL 中可
  • 为什么 MySQL 创建带有 _seq 后缀的表?

    我创建了一个 InnoDB 表 名为foo在 MySQL 中 一旦我对表执行插入操作 我就会看到另一个表foo seq被建造 如果我删除自动生成的表 它会在下一次插入后出现 是什么原因造成的 听起来像是正在创建一个序列 您是否有自动生成的主
  • 查询中列的顺序重要吗?

    当从 MySQL 表中选择列时 与表中的顺序相比 选择列的顺序是否会影响性能 不考虑可能覆盖列的索引 例如 您有一个包含行 uid name bday 的表 并且有以下查询 SELECT uid name bday FROM table M
  • java mysql 准备好的语句

    我正在尝试使用 java 向数据库中进行简单的插入 它告诉我我的 sql 语法已关闭 但是 当我复制打印出来的字符串并将其放入 phpmyadmin 中的 sql 命令中时 它会正确执行该命令 并且我似乎无法弄清楚 java 中的字符串查询
  • mysql-如何向列申请补助?

    用户名 撤销对数据库的选择 Person I set GRANT SELECT id ON database Person TO username localhost 不是工作 gt SELECT secret FROM Person Go

随机推荐

  • 使用 JAXB 2.1 将多个模式编译到不同的包中

    我有一个 CommonTypes xsd 我使用 xs include 将其包含在我的所有其他 XSD 中 我明白了 Multiple
  • 蓝鸟中的嵌套承诺

    我试图弄清楚如何在蓝鸟库中正确使用承诺 我在代码中遇到了一些嵌套的承诺 我注意到在 bluebird 文档中它写道 如果您使用完整的 bluebird API 产品 您几乎永远不需要首先求助于嵌套承诺 还有许多其他关于承诺被滥用的博客文章嵌
  • 用于 SMS 的 ContentObserver [重复]

    这个问题在这里已经有答案了 我正在尝试提取发送的短信 我知道没有用于此目的的 BroadcastReciver 所以我发现我可以使用 ContentObserver 来监听数据库中的更改 我怎样才能实现这个 我的目标是仅获取发送的新短信并通
  • 两个相同的字符串不相等(不是指针/引用错误)

    我从文件中读取了一行 KatalogObrazk w 1 32 意味着我应该在以下位置查找数据 C Users NAME OF THE USER KatalogObrazk w 所以我就这么做了 但可怕的事情正在发生 在splitLine
  • WPF:即使显式设置 WindowState,窗口仍保持最小化

    我的应用程序有一个托盘图标 双击该图标可隐藏或显示应用程序窗口 我的问题是 如果窗口隐藏时处于最小化状态 我似乎无法将窗口带到前台 例如 假设用户最小化应用程序 然后双击托盘图标 然后应用程序窗口将隐藏并从任务栏中消失 当用户再次双击托盘图
  • GenyMotion 虚拟设备打开并立即消失

    我下载了带有虚拟 VM 包的 GenyMotion Android 模拟器 一切都很顺利 直到虚拟设备下载过程为止 虚拟设备已成功下载 但当我尝试通过点击播放按钮运行虚拟设备时 会弹出一个小窗口 显示正在初始化虚拟设备 然后启动虚拟设备 几
  • 如何仅在触发特定活动后启动 FCM ID 服务?

    假设我有一个LoginActivity用户可以在其中使用现有凭据注册或登录 我不想要FirebaseInstanceIdService生成令牌 除非用户已登录并且MainActivity应用程序的启动 谢谢 你无法阻止FirebaseIns
  • Mockito 间谍 - 调用内部类方法而不是监视间谍对象中的方法时

    我的内部类如下 public class ClassWithInnerObject private final InnerObject innerObject public ClassWithInnerObject innerObject
  • 获取shell中程序的执行时间

    我想在几个不同的条件下在linux shell 中执行某些操作 并且能够输出每次执行的执行时间 我知道我可以编写一个 perl 或 python 脚本来执行此操作 但是有没有办法在 shell 中执行此操作 恰好是 bash 使用内置的ti
  • 标准库容器和不完整类型的规则是什么?

    给定一个不完整的类型 struct S 那么以下声明是 S p ok pointer to incomplete types is allowed std deque
  • 将 Word 转换为 HTML,然后在网页上呈现 HTML

    我的项目正在进行中 但我不知道从哪里开始 我的老板希望能够以 HTML 格式显示 Word 文档 并且它看起来与 Word 文档相同 在一次又一次尝试让我在弹出窗口或灯箱中显示 Word 文档后 他一直坚持剥离 Word 的内容 将其转换为
  • 如何在boost log 2.0中记录编码器的行数?

    我可以为此使用 LineID 属性吗 我希望我可以使用 sink set formatter 来执行此操作而不是使用 LINE and FILE 在每个日志语句中 我为此苦苦挣扎 直到我发现这个片段 define LFC1 LOG TRAC
  • Swiftui [BUG] 导航视图和列表仅在 iPad 模拟器上不显示

    各种iPad模拟器上的空白页 前往Apple开发者网站下载以下教程项目 https developer apple com tutorials swiftui building lists and navigation 在任何 iPad 模
  • 在支持应用程序的模式下在 Mobile Safari 中使用 mailto: 链接时出错

    我在网页中有一个表单 其操作为 mailto email 其中电子邮件是真实的电子邮件地址 当我在 Mobile Safari 中以常规模式加载此页面时 即 不是在支持应用程序的模式下从主屏幕启动 效果很好 在我提交表单后 电子邮件应用程序
  • ASP.Net MVC 6 中的全局错误日志记录

    我正在测试 MVC 6 Web Api 并希望实现登录到全局错误处理程序 只是保证没有错误会在没有被记录的情况下离开系统 我创建了一个 ExceptionFilterAttribute 并将其全局添加到启动中 public class Ap
  • Angular2 http 重试逻辑

    我有一个带有基于令牌的身份验证机制的 API 成功登录后 我在浏览器的本地存储中存储两个令牌 访问令牌和刷新令牌 访问令牌包含在服务器端授权用户所需的所有必要信息 并且具有到期日期 当访问令牌过期时 客户端可以使用刷新令牌请求新的访问令牌
  • 如何使用新线程库中的 Task.Wait For Any?

    尝试使用Delphi中的线程库并行计算任务并使用TTask WaitForAny 为了得到第一个计算结果 偶尔会出现异常停止执行 异常时的调用堆栈 第一次机会例外 价格为 752D2F71 美元 异常类 EMonitorLockExcept
  • TextView 中的整数值

    如何在 TextView 中显示整数值 当我尝试时 出现错误android content res Resources NotFoundException String resource ID TextView tv new TextVie
  • 如何在Java 8中逐行读取文件?

    在Java 8中 我看到Files类中添加了名为lines 的新方法 该方法可用于在Java中逐行读取文件 它适用于大文件吗 我的意思是我们可以加载前 1000 行 然后加载第二组 1000 行吗 我有 1GB 的大文件 可以吗 有人可以分
  • 狮身人面像和“你的意思是……?”建议想法。它会起作用吗?

    我正在尝试想出最快的方法来提出搜索建议 起初我认为 Levenstein UDF 函数与 mysql 表相结合就可以完成这项工作 但是使用 levenshtein mysql 必须遍历表中的每一行 大量的单词 这会使查询非常慢 现在我最近安