Search engine SphinxQL中的LIKE条件

Search engine SphinxQL中的LIKE条件,search-engine,sphinx,Search Engine,Sphinx,亲爱的程序员和IT专家们,我需要你们的帮助。我刚刚开始研究狮身人面像是什么。我甚至还制作了自己的谷歌建议(GoogleSuggest),用于修复频繁和常见的人类搜索输入错误。问题是,它总是试图修复错误并中断实际输入。 我希望搜索引擎首先通过子字符串在搜索字段中找到一致性,然后,如果没有找到一致性,则使用我的逻辑修复错误。如果简单地说,我希望sphinx首先执行这个SQL等效命令 SELECT * FROM suggest WHERE keyword LIKE('%$keyword%') 如果没

亲爱的程序员和IT专家们,我需要你们的帮助。我刚刚开始研究狮身人面像是什么。我甚至还制作了自己的谷歌建议(GoogleSuggest),用于修复频繁和常见的人类搜索输入错误。问题是,它总是试图修复错误并中断实际输入。 我希望搜索引擎首先通过子字符串在搜索字段中找到一致性,然后,如果没有找到一致性,则使用我的逻辑修复错误。如果简单地说,我希望sphinx首先执行这个SQL等效命令

SELECT * FROM suggest WHERE keyword LIKE('%$keyword%')
如果没有发现,则继续修复错误。
主要问题是……是否可以让spinx通过子字符串进行搜索?

斯芬克斯基本上可以这样做,但需要了解它是如何工作的。Sphinx索引单个单词,并通过关键字进行匹配。它使用一个大的倒排索引来加快查询速度,而不是运行子字符串匹配

所以我们可以将“一两个”匹配为一个查询,它将匹配一个包含“。。。一个两个…,但顺序不重要,其他单词可以出现,因此也将匹配。。。“二三一…”这不会发生在mysql上,就像它是一个纯粹的子字符串匹配一样

可以使用短语运算符来匹配“一二”

此外,默认情况下,Sphinx匹配整个单词。所以匹配‘一二’只会匹配这两部作品。它与文件不匹配,比如说。。。“一二二一……”而LIKE并不局限于整个单词

因此,您可以使用通配符来允许部件匹配。匹配“*1-2*”-还需要在索引上使用min_infix_len config启用它

更重要的是,sphinx不使用默认的charset_表索引标点符号等,所以文档会说“。。。一两个?…'仍将匹配“一二”。SQL-like不会忽略这一点

您可以通过charset_表将sphinx更改为索引更多标点符号,以获得更接近子字符串的匹配

因此,从索引中选择*,其中匹配“*$keyword*”可能是与原始ie最接近的sphinx查询,即子字符串匹配。只要你意识到这些差异。也有MySQL校勘要考虑,它们与CaseStIt表不完全相同。 坦率地说,这是正确的。我想知道,是不是有点奇怪。如果你只是想搜索一个文本语料库,你可以像往常一样索引它。然后通过调用关键字运行查询,了解查询是否是索引中的有效单词,即只告诉您给定单词在索引中出现的次数。然后可以运行您的算法来修复错误

作为旁注,斯芬克斯有一个内置的建议系统