我的应用程序将客户名称存储在3列中,但使用单个参数触发搜索。我正在尝试实施FULLTEXT搜索以有效搜索此客户数据库。
我正在寻找名字
RIMA HUSSEIN
我使用以下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 + '%'))
答案 0 :(得分:3)
我们的应用程序必须在表格的几乎每个列中进行搜索,因此我们创建一个视图WITH SCHEMABINDING
和CLUSTERED INDEX
,结构如下:
CREATE VIEW search_view
WITH SCHEMABINDING
AS
SELECT id,
column1 + ' ' + column2 + etc as search_text
FROM table
CREATE CLUSTERED INDEX ci_id ON search_view (id);
并在search_text
列上添加全文索引。
然后我们只是:
SELECT ...
FROM table t
INNER JOIN CONTAINSTABLE(search_view, search_text, '"word1*" AND "word2*" ... ') AS sv
ON t.ID = sv.ID
答案 1 :(得分:0)
试一试..
SELECT * FROM dbo.tblM_REMMASTER WHERE CONTAINS((REM_FNAME,REM_MNAME, REM_LNAME) ,'"RIMA*"')
AND CONTAINS((REM_FNAME , REM_MNAME, REM_LNAME), '"*hussein"')