【发布时间】:2016-07-14 16:22:47
【问题描述】:
我的应用程序将客户姓名存储在 3 列中,但搜索使用单个参数触发。我正在尝试实现 FULLTEXT 搜索以有效地在此客户数据库中进行搜索。
我在找名字
里玛侯赛因
我使用下面的 TSQL 来搜索起始词。
SELECT
REM_ID, REM_FNAME, REM_MNAME, REM_LNAME
FROM
dbo.tblM_REMMASTER
WHERE
CONTAINS((REM_FNAME , REM_MNAME, REM_LNAME) ,'"RIMA*"')
查询按预期工作,为我提供了良好的搜索结果。
如果我提供带有短语的更新查询,这种情况不会为我提供任何结果。
为尝试解决方案而执行的示例测试查询。
SELECT
REM_ID, REM_FNAME, REM_MNAME, REM_LNAME
FROM
dbo.tblM_REMMASTER
WHERE
CONTAINS((REM_FNAME , REM_MNAME, REM_LNAME), '"rima*" AND "*hussein"')
SELECT
REM_ID, REM_FNAME, REM_MNAME, REM_LNAME
FROM
dbo.tblM_REMMASTER
WHERE
CONTAINS(REM_FNAME ,'"RIMA HUSSEIN"')
SELECT
REM_ID, REM_FNAME, REM_MNAME, REM_LNAME
FROM
dbo.tblM_REMMASTER
WHERE
CONTAINS((REM_FNAME , REM_MNAME, REM_LNAME) ,'NEAR ((RIMA,HUSSEIN),MAX,TRUE)')
以前有没有人遇到过这个问题,或者在这个特定的场景下可以实现什么样的解决方案逻辑?
在没有全文的实时环境中测试的示例查询:
SET @NAME=N'RIMAHUSSEIN'
SELECT
REM_ID, REM_FNAME, REM_MNAME, REM_LNAME
FROM
dbo.tblM_REMMASTER WITH (READPAST)
WHERE
((LTRIM(RTRIM(REM_FNAME)) + LTRIM(RTRIM(REM_MNAME)) + LTRIM(RTRIM(REM_LNAME)) LIKE '%' + @NAME + '%'))
【问题讨论】:
-
你能把名字输入的第一个、中间和最后一个组件分开,并在每个组件上使用
LIKE吗? -
准确显示每个条件应该做什么。您可以尝试使用 LIKE。
标签: sql sql-server tsql full-text-search sql-server-2014