Criei uma exibição indexada com alguns campos e criei uma pesquisa de texto completo com base nesses campos.
aqui está a minha opinião:
alter VIEW vFullTextSearch
WITH SCHEMABINDING
AS
SELECT M.Id as MessageId, M.Subject , M.Body,MR.EmailAddress, MR.FriendlyName,
M.Subject + ' ' + M.Body + ' ' + MR.EmailAddress + ' ' + MR.FriendlyName as FTS
FROM DBO.MESSAGE M
INNER JOIN DBO.MessageRecipient MR ON M.Id = MR.MessageId AND MR.RecipientTypeId=1
GO
--Create an index on the view.
CREATE UNIQUE CLUSTERED INDEX IDX_V1_vFTS
ON vFullTextSearch (MessageId);
GO
Eu indexei todos os campos da tabela.
Estou usando este SQL para encontrar resultados
SELECT M.*
FROM Message AS M
INNER JOIN FREETEXTTABLE(vFullTextSearch, *, 'Doe') AS KEY_TBL
ON M.Id = KEY_TBL.[KEY];
mas com "John Doe" sendo o [vFullTextSearch.FriendlyName]
valor em todos os registros da minha visão, por que não estou obtendo resultados ao pesquisar todos os campos por 'doe'?
De acordo com o MSDN... http://msdn.microsoft.com/en-us/library/ms177652.aspx
tabela É o nome da tabela que foi marcada para consulta de texto completo. tabela ou exibição pode ser um nome de objeto de banco de dados de uma, duas ou três partes. Ao consultar uma exibição, apenas uma tabela base indexada de texto completo pode ser envolvida. tabela não pode especificar um nome de servidor e não pode ser usada em consultas em servidores vinculados.
Como sua view possui índices de texto completo em mais de uma tabela, você não terá permissão para fazer isso.
Você poderia usar uma união para verificar ambas as tabelas em sua exibição.
Não tenho acesso a uma instalação SQL agora, mas deixe-me saber se funciona.