Help W/ Stored Procedure? - Full-text Search: Search Query Of Normalized Data
Mar 29, 2008
Hi -
I'm short of SQL experience and hacking my way through creating a simple search feature for a personal project. I would be very grateful if anyone could help me out with writing a stored procedure.
Problem: I have two tables with three columns indexed for full-text search. So far I have been able to successfully execute the following query returning matching row ids:
dbo.Search_Articles
@searchText varchar(150)
AS
SELECT ArticleID
FROM articles
WHERE CONTAINS(Description, @searchText) OR CONTAINS(Title, @searchText)
UNION
SELECT ArticleID
FROM article_pages
WHERE CONTAINS(Text, @searchText);
RETURN
This returns the ArticleID for any articles or article_pages records where there is a text match. I ultimately need the stored procedure to return all columns from the articles table for matches and not just the StoryID. Seems like maybe I should try using some kind of JOIN on the result of the UNION above and the articles table? But I have so far been unable to figure out how to do this as I can't seem to declare a name for the result table of the UNION above. Perhaps there is another more eloquent solution? Thanks!
I need to create a stored procedure that allows a full text search with multiple filters. The FTS is a three variable proximity (x near y near z) drawing from three textboxes which works fine in my VB application:
WHERE CONTAINS(SectionText, ' """ & SearchTerm1 & """ NEAR """ & SearchTerm2 & """ NEAR """ & SearchTerm3 & """ ')
The filters consist of 4 comboboxes and 2 textboxes. I am trying to use the dynamic SQL approach found here:
http://www.sommarskog.se/dyn-search.html
The dynamic SQL in the stored procedure that I have created based on this model works fine for filtering, but I have not been able to get my FTS query integrated with it. I have tried various ways of declaring the SearchTerms as parameters, etc. but no luck.
Any help in getting this to work (or advice for using a different approach that is more appropriate) would be greatly appreciated.
FROM FullDocuments INNER JOIN Details ON FullDocuments.FullDocNo = Details.FullDocNo WHERE 1 = 1 AND CONTAINS(SectionText, @searchterm1 NEAR @searchterm2 NEAR @searchterm3)'
IF @fulldocno IS NOT NULL SELECT @sql = @sql + ' AND FullDocuments.fulldocno = @xfulldocno'
IF @DocType IS NOT NULL SELECT @sql = @sql + ' AND FullDocuments.DocType = @xDocType'
IF @year IS NOT NULL SELECT @sql = @sql + ' AND Details.year = @xyear'
IF @sex IS NOT NULL SELECT @sql = @sql + ' AND Details.sex = @xsex'
IF @category IS NOT NULL SELECT @sql = @sql + ' AND Details.category = @xcategory'
IF @agenum IS NOT NULL SELECT @sql = @sql + ' AND Details.agenum = @xagenum'
SELECT @sql = @sql + ' ORDER BY FullDocuments.FullDocumentID'
I thought this would be quite simple but can't find the correct syntax:ALTER Procedure usp_Product_Search_Artist_ProductTitle
(@ProductTitle varchar(255))
AS
SELECT ProductTitle
FROM tbl_Product
WHERE CONTAINS(dbo.tbl_Product.ProductTitle, @ProductTitle) My problem is that if I pass "LCD Flat Screen" as teh @ProductTitle parameter the query falls over as it contains spaces. Guess i'm looking for something like: WHERE CONTAINS(dbo.tbl_Product.ProductTitle, '"' + @ProductTitle + "'")Thanks in advance.R
Our clients want to be able to do full text search with a single letter. (Is the name Newton, Nathan, Nick?, Is the ID N1, N2...). Doing a single character full text search on a table work 25 out of 26 times. The letter that doesn't work is 'n'. the WHERE clause CONTAINS(full_text_field, ' "n*" ') returns all rows, even rows that have no 'n' in them anywhere. Adding a second letter after the "n" works as expected.
Here is an example
create table TestFullTextSearch ( Id int not null, AllText nvarchar(400) ) create unique index test_tfts on TestFullTextSearch(Id); create fulltext catalog ftcat_tfts;
I have a scenario of where the standard Full-Text search identifies keywords but Semantic Search does not recognize them as keywords. I'm hoping to understand why Semantic Search might not recognize them. The context this is being used in medical terminology and the specific key words I noticed missing right off the bat were medications.
For instance, if I put the following string into a FT indexed table
'J9355 - Trastuzumab (Herceptin)' AND 'J9355 - Trastuzumab emtansine'
The Semantic Search recognized 'Herceptin' and 'Emtansine' but not 'Trastuzumab'
Nor in
'J8999 - Everolimus (Afinitor)'
It did not recognize 'Afinitor' as a keyword.
In all cases the Base of Full-Text did find those keywords and were identifiable using the dmvsys.dm_fts_index_keywords_by_document.It does show the index as having completed.
why certain words might not be picked up while others would be? Could it be a language/dictionary issue? I am using English and accent insensitive settings?
would you use sql server "full text search" feature as your site index? from some reason i can't make index server my site search catalog, and i wonder if the full text is the solution. i think that i wll have to you create new table called some thing like "site text" and i will need to write every text twice- one the the table (let's say "articles table") and one to the text. other wise- there is problems finding the right urlof the text, searching different tables with different columns name and so on... so i thought create site search table, with the columns: id, text, url and to write every thing to this table. but some how ot look the wrong way, that every forum post, every article, album picture or joke will insert twice to the sqr server... what do you think?
I have installed the Adobe iFilter 11 64 bit and set the path to the bin folder. I still cannot find any text from the pdf files. I suspect I am missing something trivial because I don't find much when I Bing for this so it must not be a common problem.Here is the code.
--Adobe iFilter 11 64 bit is installed --The Path variable is set to the bin folder for the Adobe iFilter. --SQL Developer version 64 bit on both Windows 7 and Windows 8. USE master; GO DROP DATABASE FileTableStudy; GO CREATE DATABASE FileTableStudy ON PRIMARY
I have Sql server 2005 SP2. I enabled it for Full Text search. Substring search where i enter *word* doesn't return any row. I have a table testtable where description has word Extinguisher.
If i run a query with *ting* it doesn't return any row. select * from testtable where contains(description,'"*xting*"') ;
But it works if i do select * from testtable where contains(description,'"Exting*"') ;
The Full text search document says it supports substring search. Is it an issue with sql server 2005?Please help.
I am using Sql Server 2014 Express edition.I have a table with a varchar(max) column. I have created a full text search that use the stoplist "system". column has this struct: xxx.yyy.zzz.... where xxx, yyy, zzz... are numbers, like 123.345.123123.366456...I can have rows like that:
select * from Mytable where contains(MyColumn, '123.345.')
I gues the contains would return all the rows with column contains 123.345, but this does not return all the expected rows, only one row.I have tried to replace "." with "-" but the result is the same.I have also tried with '123.345.*. In this case I have got more results, but no all the exptected rows.If I use this query:
select * from MyTable where MyCOlumn like '123.345.%';
Hello!! I want to add the full text search feature into 2 columns of a table in my DB.What will be the query that I should execute.I have aalready the tables existing.So probably I need to ALTER alongwith the new functions!!
I have a table with 3M rows that contains a varchar(2000) field withvarious keywords. Here is the table structure:PKColumnImageIDFullTextColumnThere is an association table:ImageIDContractIDNow, I want to do a query where the ContractID = x and Contains someword in the FullTextColumn. There is an association table that mapsImages to Contracts - so I can't use the trick of putting the Contractcode in the FullTextColumn.I'm finding that first the FTS service is performing a search on theKeyword (which can take a long time if 100K rows are returned) thenjoining to the association table for the particular contract.Is there anyway to make this faster by telling the FTS service, onlysearch this subset of rows for the keyword based on the contract.Sorry if this sounds convoluted. Appreciate any help you can suggest.Thanks!
when i execute a query for the first time whith full text service from visual studio, show me the error 'server not responding' and when i execute this query for second time works perfectly.
I have written this sample query to search a full-text indexed table and return the results. If the word occurs more than once I want it to return as a new record and the results show a short summary of the location. I was using 'like', but the full table scans were really slowing it down. Can performance be improved for the following (The results returned by my query are accurate)
I am trying to inject dynamically generated text into a Sql2000 stored procedure. What am I doing wrong?A code behind routine generates the following string value based on a visitor entering 'sail boats' in TextBox1. The routine splits the entry and creates the below string.Companies.L_Keywords LIKE '%sail%' AND Companies.L_Keywords LIKE '%boats%' I am trying to place this string result in the WHERE statement of a Sql2000 Stored Procedure using parameter @VisitorKeywords. PROCEDURE dbo.KWsearchAS SELECT DISTINCT Companies.L_Name, Companies.L_ID, Companies.L_EnabledWHERE ( @visitorKeywords ) AND (Companies.L_Enabled = 1)ORDER BY Companies.L_Name I am wanting the resulting WHERE portion to be: WHERE ( Companies.L_Keywords LIKE '%sail%' AND Companies.L_Keywords LIKE '%boats%' ) AND (Companies.L_Enabled = 1) Thank you
I am saving large text document in an image type of column in a SQL Server 2000 table. How will I set up searching of words/ phrases for data stored in this column?
Hi, i'm trying to do a full text search on my site to add a weighting score to my results. I have the following database structure: Documents: - DocumentID (int, PK) - Title (varchar) - Content (text) - CategoryID (int, FK) Categories: - CategoryID (int, PK) - CategoryName (varchar) I need to create a full text index which searches the Title, Content and CategoryName fields. I figured since i needed to search the CategoryName field i would create an indexed view. I tried to execute the following query: CREATE VIEW vw_DocumentsWITH SCHEMABINDING ASSELECT dbo.Documents.DocumentID, dbo.Documents.Title, dbo.Documents.[Content], dbo.Documents.CategoryID, dbo.Categories.CategoryNameFROM dbo.Categories INNER JOIN dbo.Documents ON dbo.Categories.CategoryID = dbo.Documents.CategoryID GOCREATE UNIQUE CLUSTERED INDEX vw_DocumentsIndexON vw_Documents(DocumentID) But this gave me the error: Cannot create index on view 'dbname.dbo.vw_Documents'. It contains text, ntext, image or xml columns. I tried converting the Content to a varchar(max) within my view but it still didn't like. Appreciate if someone can tell me how this can be done as surely what i'm trying to do is not ground breaking.
Hello everyone ! I want to perform Full Text Search with SQL Server 2000. My documents (.doc, .xls, .txt, .pdf) are stored in a SQL Server field which is binary (the type of the column is image). I would like to know, how you can extract pieces of text from the documents. Example: I have a ASPX page with codebehind in C# making the search in a table in SQL server that is full text indexed. I make a search looking for the word "peace", than SQL server will take care about the search and return it to me the rows that match with that. But also I'd like to extract the 50 characters before and after where sql server found the word "peace" to show in the result page. Does anyone has any idea how to work around it ? Best regards. Yannick
Hi I have a full text index on my product table. When I do a search for Record, it returns all values for Record and Records.Now If I do a search with a spelling mistake say Recod . it doen't return anything.How can I get the full text to return my query even if there is a spelling mistake ? Thanks My query:SELECT * From Product WHERE FREETEXT (description, @SearchString)
hi all.i want to search, for example :"test string" in database : table have column(name) , i want to search all rows with column(name) is "test " or "string" or "test string"i don't want to use(full text search of sqlserver 2005 ) can i help me.thanks in advance
Hello ! With SQL Server Management Studio Express I have created a catalog and a index.Here is the code : create fulltext catalog myfirstcatalogcreate unique index myfirstindex on northwind.dbo.customers(companyname)create fulltext index on northwind.dbo.customers(companyname)key index myfirstindex ON myfirstcatalogWITH CHANGE_TRACKING AUTO With SQL Server Management Studio Express and the following command the full text search is working fine. select companynamefrom northwind.dbo.customerswhere contains(companyname, ' "blauer" ') I have a big problem : When I try to use this database (NOTRHWIND.MDF) into my .aspx file with VWD 2008 I get an error : Cannot use full-text search in user instance.
Can you tell me what can I do to make use of full-text search inside my aspx pages ? Thank You !
Hi friends i work with sql server 2005 express(Management Studio) can i use full text search service with that edition of sql server? and how i can use that. thank u.
I am asking about installing Microsoft Search service in SQL Server 2000 in Windows XP Professional Is that possible? And By the way it's not possible for me to switch to SQL Server 2005 that I know that full text indexing already exists in it
After following all of the steps in Swynk's Guide to Full Text Search, I still can't seem to retrieve any records from the full-text search. I get messages saying that I created the Index correctly and that I successfully populated the catalog. But when I View the Properties of the catalog, the Unique Word Count = 1 (but there are thousands of words in the table). I know that there is a record with the word "help" in one of the full-text indexed columns, but when I call Contains(column-name, 'help'), I recieve an empty recordset.
Does anyone have any suggestion on what I can try next?
My Prod. server is having SQL Server 7.0 with SP2 installed. I am planning to install Full Text Search component. I know I have to run setup and select Full Text Search from Server Components. But, Do I have to re-install service pack 2 after this ? What are the other concerns in, such modifications to the existing SQL installation ?
Greetings ! Has anyone seen a problem in SQL 7 where you create a full text catalog, define an index on a table, and run 'populate', and end up with an empty catalog ? It runs for a while during the population, and there are no messages in the logs, but the 'item count' property of the catalog is 0. Also you can run a query that uses the index (i.e. uses 'CONTAINS') and you receive no error, and no results. I've set this up on other servers, so I know it works, but can find no mention of this problem anywhere.
Hi, I got a problem in my SQL2000 server full-text search function. When I created the full-text catalog and index on tables, I got the message showing it is successful. But when I checked the properties of the catalog, I found "item count" is zero. Apparently, it didn't populate any data into index. What could the possible reason be? Any idea? I appreciate your comments.
I am using SQL server 2000 with SP3 on Windows 2003 server.
I have scheduled a job to populate a full text index incrementally. Everytime it runs the job to populate the index table it writes some messages into event log. Like this: 1. Event Type : Information Event Source : Microsoft Search Event Category: Gatherer Event ID : 3019 Date :8/7/2004 Time :2:21:00 PM User : N/A Computer : ARC-03-DEV Description:1 The crawl on project <SQL Server SQL00002000009> has started.
2. Event Type : Information Event Source : Microsoft Search Event Category: Gatherer Event ID : 3047 Date :8/7/2004 Time :2:21:00 PM User : N/A Computer : ARC-03-DEV Description: The end of the incremental crawl for project <SQL Server SQL00002000009> has been detected. The Gatherer successfully processed 998 documents totaling 0K. It failed to filter 0 documents. 998 documents were modified. 0 URLs could not be reached or were denied access.
The event log is getting filled frequently.
Is there any way to stop this messages? It is normal for Microsoft Search to write this message into EventLog? Even though there is no chanage in the database it give the above messages.