如何检索匹配的单词文本搜索

时间:2018-09-20 14:40:52

标签: sql sql-server

如何检索单词文本搜索行。例如,如果将输入搜索为“水Bottel”,则需要类似“水肥皂Bottel”,“水牛奶Bottel”,“水铜Bottel”的输出。我知道如何使用LIKE运算符。

random

3 个答案:

答案 0 :(得分:3)

您可以这样做:

DECLARE @SearchTerm VARCHAR(100) = 'water bottel'

SELECT *
FROM #SearchText
WHERE ProductName LIKE '%' + REPLACE(@SearchTerm, ' ', '%') + '%'

但是,如果您还需要返回包含短语bottel water的行,则这些单词的顺序将意味着上面的命令不起作用。在这种情况下,您需要将查询分解为多个单词,例如:

SELECT *
FROM #SearchText
WHERE ProductName LIKE '%water%'
AND ProductName LIKE '%bottel%'

如果该表上有一个full text index,则可以使用CONTAINS

SELECT *
FROM #SearchText
WHERE CONTAINS(ProductName, '"water" AND "bottel"')

答案 1 :(得分:1)

您可以在空间上拆分数据,并搜索拆分后的单词是否与拆分后的产品名称匹配:

如果所有搜索到的单词都必须匹配:

SELECT *
FROM   #SearchText st
WHERE  ( SELECT COUNT(value)
         FROM   STRING_SPLIT('water Bottel', ' ') ) = ( SELECT COUNT(*)
                                                        FROM   STRING_SPLIT(st.ProductName, ' ') AS sv
                                                        JOIN   STRING_SPLIT('water Bottel', ' ') AS ss
                                                          ON sv.value = ss.value ) 

如果一个或多个单词必须匹配:

SELECT *
FROM   #SearchText st
WHERE  EXISTS ( SELECT 1
                FROM   STRING_SPLIT(st.ProductName, ' ') AS sv
                JOIN   STRING_SPLIT('water Bottel', ' ') AS ss
                  ON sv.value = ss.value ) 

注意:string_split函数内置在SQL Server 2016中,如果使用较低版本,则可以搜索创建自定义实现。

答案 2 :(得分:0)

使用LIKE运算符。

SELECT
    *
FROM #SearchText
WHERE LOWER(ProductName) LIKE '%water%'
        AND LOWER(ProductName) LIKE '%bottel%'

如果列/数据库/服务器的协作不区分大小写,则可以省略LOWER(...)函数。