如何从匹配函数如谷歌的mysql查询中返回不完整或类似的单词

时间:2016-01-04 11:26:41

标签: mysql

如何让以下查询返回' cluburba'或者' club urban'或者' club.urban'太?

SELECT * 
FROM Companies 
WHERE MATCH(`Designor Names`) AGAINST ('Cluburban' IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION) 
GROUP BY `Designor Names`

3 个答案:

答案 0 :(得分:1)

这是一个棘手的问题。我假设搜索字词为'cluburban' ...

幸运的是,如果您与'club urban'匹配,则应选择'club urban''club.urban',因为它会分别查找这两个字。但是你的代码需要弄清楚单词应该首先用空格分隔。

您可以先通过某种第三方拼写检查或字典查找来运行搜索字词,并希望它尽可能返回'club urban'并同时运行原始字词和任何可能的字段{{1但是这不会返回MATCH AGAINST

我怀疑MySQL可能会赢得你想要的开箱即用的东西,而且我正在寻找其他的插件或软件包来做到这一点。

'cluburba'也是正确的拼写而非designer

答案 1 :(得分:1)

我的建议很少:

<强> 1。在查询中使用多个

SELECT 来自公司 设计师名称在哪里'%cluburba%' AND Designer名称LIKE'%club%' AND Designer Names LIKE'%urban%';

<强> 2。使用IN查询。

* SELECT * FROM Companies             设计师姓名IN(“cluburba”,“club”,“urban”); *

第3。使用Anagram搜索。

SELECT Designer Names,        0 + IF(a&gt; 0,a - 0,0)        + IF(b&gt; 0,b - 0,0)        + IF(c&gt; 0,c - 0,0)        + IF(d&gt; 0,d - 0,0)        + IF(e&gt; 1,e - 1,0)        + IF(f&gt; 0,f - 0,0)        + IF(g&gt; 0,g - 0,0)        + IF(h&gt; 0,h - 0,0)        + IF(i&gt; 1,i - 1,0)        + IF(j&gt; 0,j - 0,0)        + IF(k&gt; 0,k - 0,0)        + IF(l&gt; 0,l - 0,0)        + IF(m&gt; 0,m - 0,0)        + IF(n&gt; 1,n - 1,0)        + IF(o&gt; 0,o - 0,0)        + IF(p&gt; 0,p - 0,0)        + IF(q&gt; 0,q - 0,0)        + IF(r&gt; 0,r - 0,0)        + IF(s&gt; 1,s - 1,0)        + IF(t&gt; 2,t - 2,0)        + IF(u&gt; 0,u - 0,0)        + IF(v&gt; 0,v - 0,0)        + IF(w&gt; 0,w - 0,0)        + IF(x&gt; 0,x - 0,0)        + IF(y&gt; 0,y - 0,0)        + IF(z&gt; 0,z - 0,0)AS差异 来自Companies WHERE长度(Designer Names)&lt; = 8 有差异&lt; = 2;

在所有情况下,请使用Distinct以避免重复值。

答案 2 :(得分:0)

你可以使用operator&#34; Like&#34;

SELECT * FROM Companies where companie like '%Cluburban%'