2016-07-07 238 views
0

比方說,我們有這個值的列:(?CONTAINS)查找字符串

bla dibla 

其搜索表達我可以用用這個搜索字符串,找到上面的條目:

bladibla 
+0

從表中選擇列名,其中替換(columnname,'','')like'%bladibla%'。試試這個樣子 – Mani

+0

那不是全文搜索還是我錯過了什麼? – cs0815

回答

1

恐怕不可能用全文搜索來搜索這樣的字符串,因爲MSSQL分析行並從字符串中獲取「詞」(標記)。所以,如果你有價值bla dibla,MSSQL會將它分成兩個字bladibla。 解決你的問題,你可以這樣做:

  1. 添加持久化計算列與式(replace([Value],' ',''))
  2. 添加全文索引此列
  3. 而使用搜索上的計算列

CREATE TABLE [dbo].[TestTable](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [Value] [nvarchar](max) NOT NULL, 
    [ValueTrimed] AS (replace([Value],' ','')) PERSISTED, 
CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED 
([Id] ASC) 

INSERT INTO TestTable 
(Value) 
Values 
('bla dibla') 

SELECT * 
FROM [dbo].[TestTable] as tt 
where CONTAINS (tt.ValueTrimed, 'bladibla') 

SELECT * 
FROM [dbo].[TestTable] as tt 
INNER JOIN FREETEXTTABLE([dbo].[TestTable], ValueTrimed, 'bladibla') AS KEY_TBL ON tt.Id = KEY_TBL.[KEY]; 
+0

謝謝你有道理。是否沒有可能涉及FREETEXT的模糊搜索類型。 – cs0815

+1

@csetzkorn我花了很多時間調整msssql全文搜索,而且做一些比簡單的'CONTAINS'和屏蔽搜索更復雜的事情是非常困難的。我總是不得不使用一些黑客或額外的計算,列,表格等。因此,爲了真正複雜的文本搜索,您最好使用類似ElasticSearch的東西。但是,可以在MSSQL中實現簡單的解決方案。 – Backs

+0

謝謝。對Mongo數據庫的全文搜索有什麼意見? – cs0815