July 18, 2019 at 12:21 pm
Trying to understand why when I search for numerics in full text, contains does not return, but containstable does. It seems that in that in this instance the 0's are repeatable and not indexed, but why does one work and the other not? Is there a way to make it work regardless?
CREATE TABLE [dbo].[EquipSrch](
[ID] [int] IDENTITY(1,1) NOT NULL,
[SERIAL_NUMBER] [nvarchar](18) NOT NULL,
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Add this one row:
serialnumber of 00000A00J010002158
Create full text index with that field.
DECLARE @searchTerm AS nvarchar(100)
SET @searchTerm = '00000A00J010002158'
SELECT *
FROM [Search]
WHERE CONTAINS ( [serialnumber], @searchTerm)
o row(s) returned
set @searchTerm = 'A00J010002158'
SELECT RANK, serialnumber FROM [search] srch
INNER JOIN
--CONTAINSTABLE ([search , *, @searchTerm) AS ACC
containstable ([search] , *, 'A00J010002158') AS ACC
ON srch.ID = ACC.
1 rows(s) returned
July 19, 2019 at 1:10 pm
Thanks for posting your issue and hopefully someone will answer soon.
This is an automated bump to increase visibility of your question.
July 22, 2019 at 10:38 am
Hello,
You have to define the full-text index on the table. After that contains will work. For defining the full-text index, right-click on the table and select full-text index and click on define full-text index and follow the steps to define.
Later you can run the below query
DECLARE @searchTerm AS nvarchar(100)
SET @searchTerm = '00000A00J010002158'
SELECT * FROM [Search] WHERE CONTAINS ( [serialnumber], @searchTerm)
--------------------------- else --------------
SELECT * FROM [Search] WHERE CONTAINS ( [serialnumber], '00000A00J010002158')
July 22, 2019 at 3:13 pm
Ahh, yes the table does have a full text definition. It's just not finding A00J010002158. If I do like '%A00J010002158', it finds it. But that is very slow.
July 22, 2019 at 3:25 pm
Ahh, yes the table does have a full text definition. It's just not finding A00J010002158. If I do like '%A00J010002158', it finds it. But that is very slow.
It doesn't matter if it's FTS or not... searches based on leading wild cards are going to cause a full table or index scan. Period. If what you're searching for contains leading zeros, either remove them from the Full Text or search for the term with the leading zeros.
--Jeff Moden
Change is inevitable... Change for the better is not.
July 22, 2019 at 3:45 pm
Sailor wrote:Ahh, yes the table does have a full text definition. It's just not finding A00J010002158. If I do like '%A00J010002158', it finds it. But that is very slow.
It doesn't matter if it's FTS or not... searches based on leading wild cards are going to cause a full table or index scan. Period. If what you're searching for contains leading zeros, either remove them from the Full Text or search for the term with the leading zeros.
+1
Sometimes I add an additional column with altered (ie removing leading zeros) / additional data to aid FTS searching.
As a sidebar, if not using FTS with partial matching of trailing text I use a persisted computed column with a suitable index and either fixed number of tail characters to match on or reverse the whole column and use LIKE 'XXXX%'
Far away is close at hand in the images of elsewhere.
Anon.
Viewing 6 posts - 1 through 5 (of 5 total)
You must be logged in to reply to this topic. Login to reply