如何使用类似google的匹配功能从mysql查询中返回不完整或相似的单词
我如何使下面的查询返回“cluburba”或“club urban”或“club.urban”如何使用类似google的匹配功能从mysql查询中返回不完整或相似的单词,mysql,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` 您可以使用运算符“Like” 这是一个棘手的问题。我假设搜索词是“cluburban” 幸运的是,如
SELECT *
FROM Companies
WHERE MATCH(`Designor Names`) AGAINST ('Cluburban' IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION)
GROUP BY `Designor Names`
您可以使用运算符“Like”
这是一个棘手的问题。我假设搜索词是
“cluburban”
幸运的是,如果您与'club urban'
匹配,它应该同时选择'club urban'
和'club.urban'
,因为它将分别查找这两个词。但是您的代码需要弄清楚这些单词应该首先用空格隔开
您可以先通过某种第三方拼写检查或词典查找来运行搜索词,并希望它尽可能返回'club urban'
,然后通过匹配来运行原始词和任何可能的词,但这不会返回'cluburba'
我怀疑MySQL可能不会满足您的需求,我会寻找其他插件或包来实现这一点
另外,designer
是正确的拼写,而不是designor
我的建议很少:
1。在查询中使用多个like
挑选
来自公司
其中设计器名称为“%cluburba%”
和设计师名称,如“%club%”
以及设计师名称,如“%urban%”
2。在查询中使用。
*从公司中选择*
设计师在(“cluburba”、“club”、“urban”)中命名*
3。使用字谜搜索。
选择设计师名称
,
0+如果(a
>0,a
-0,0)
+如果(b
>0,b
-0,0)
+如果(c
>0,c
-0,0)
+如果(d
>0,d
-0,0)
+如果(e
>1,e
-1,0)
+如果(f
>0,f
-0,0)
+如果(g
>0,g
-0,0)
+如果(h
>0,h
-0,0)
+如果(i
>1,i
-1,0)
+如果(j
>0,j
-0,0)
+如果(k
>0,k
-0,0)
+如果(l
>0,l
-0,0)
+如果(m
>0,m
-0,0)
+如果(n
>1,n
-1,0)
+如果(o
>0,o
-0,0)
+如果(p
>0,p
-0,0)
+如果(q
>0,q
-0,0)
+如果(r
>0,r
-0,0)
+如果(s
>1,s
-1,0)
+如果(t
>2,t
-2,0)
+如果(u
>0,u
-0,0)
+如果(v
>0,v
-0,0)
+如果(w
>0,w
-0,0)
+如果(x
>0,x
-0,0)
+如果(y
>0,y
-0,0)
+如果(z
>0,z
-0,0)作为差异
来自公司
WHERE Length(Designer Names
)如何:SELECT*从Designor名字为'Cluburba%'的公司按Designor名字分组
您可能需要超越mySQL,并为此使用专门的搜索引擎,如Lucene。谢谢这可能是我的问题的答案question@Pekka:如果MySQL不可能涵盖club urban
或club.urban
,我可以接受您的意见作为我的解决方案。啊,OP从根本上改变了他们的问题。这不是你的错,但是你的答案现在不正确。如果你认为这个答案不正确,请编辑我的答案。。。你的回答正确吗?我对这个问题没有答案。OP想要的可能不可能仅用mySQL来完成。@rdn87。因为你的答案在我最初的问题行中不会是错误的,所以我对你的答案投了更高的票。如果我只想搜索设计师名称“cluburban”的变体,这可能是一个很好的解决方案。实际上我有2万个设计师的名字。那么你的解决方案会有什么变化吗?你能解释一下字谜搜索吗。零是什么?他们是我的关键字“cluburban”的唯一替代品还是必须准确地使用它?
SELECT * FROM Companies where companie like '%Cluburban%'