Quantcast
Channel: Für Entwickler: SQL Server Forum
Viewing all articles
Browse latest Browse all 1772

Volltextsuche SQL-Server 2014 - Suche in Excel - Dateien funktioniert nur zu etwa 40 Prozent.

$
0
0

Ich benutze SQL-Server 2014 und verwende dort die Volltextsuche und Filestream.

Nun finde ich in Excel-Dateien nicht alle Suchtexte, die aber garantiert in diesen Files vorhanden sind.

In meinem Beispiel benutze ich 17 Begriffe nämlich die folgenden:

Daheim Lieferservice GmbH
Arbeiterwohlfahrt Bundesverband e.V.
Augenarztpraxis Milchmann
ABC-Pflegedienst
Sunset Solar KG
Flitzer Verkehrsgesellschaft mbH
Autohaus Knusper GmbH
Bezirksamt Weltende
Kamm Elektrotechnik GmbH
Eschsauer Solarstromsysteme GmbH
Deutsche Bahn
Hamburg Tourismus GmbH
Wohnbau GmbH
Universitätsklinikum Hamburg
Tchibo Deutschland GmbH
Schornsteinfegermeister Mingsdorf
Vollkornbäckerei Erntefrisch

Diese habe ich in einem Excel, einem Excel2003, einem Word und einem normalen Textfile abgelegt.

Die Files liegen auf dem Server unter:

D:\TEMP\Found_In_Excel.xlsx
D:\TEMP\Found_In_Excel_2003.xls
D:\TEMP\Found_In_Word.docx
D:\TEMP\Found_In_Text.txt

Nun habe ich folgenden Code:

USE TEST_DB

set NOCOUNT ON
GO

--------------------------
-- Tabelle [MyFileTable]:
--------------------------
if exists (select * from sys.tables where name = 'MyFileTable')
    DROP TABLE [dbo].MyFileTable
GO

CREATE TABLE [dbo].MyFileTable
(
    NUM             int IDENTITY(1,1)   NOT NULL,
    GID             UNIQUEIDENTIFIER    ROWGUIDCOL  NOT NULL UNIQUE CONSTRAINT DF_FileTable_GID  DEFAULT (newid()),
    FileData        VARBINARY(MAX)      FILESTREAM  NOT NULL,   -- Document Binary Large Object
    FileExtension   nvarchar (8)                    NOT NULL,   -- Extension
    FullFileName    varchar (200)                   NOT NULL    -- Dateiname.Extension
        CONSTRAINT [PK_FileTable_NUM] PRIMARY KEY CLUSTERED (NUM) on [PRIMARY]
) ON [PRIMARY]
GO

CREATE FULLTEXT INDEX ON dbo.MyFileTable(FileData TYPE COLUMN FileExtension LANGUAGE German STATISTICAL_SEMANTICS)
   KEY INDEX PK_FileTable_NUM
   WITH STOPLIST = [GermanStopList];
GO

insert into MyFileTable ( FileData, FileExtension, FullFileName)
Select
    (SELECT BulkColumn FROM OPENROWSET( BULK 'D:\TEMP\Found_In_Excel.xlsx', SINGLE_BLOB) as ExternalFile),
    '.xlsx',
    'Found_In_Excel.xlsx'

insert into MyFileTable ( FileData, FileExtension, FullFileName)
Select
    (SELECT BulkColumn FROM OPENROWSET( BULK 'D:\TEMP\Found_In_Excel_2003.xls', SINGLE_BLOB) as ExternalFile),
    '.xls',
    'Found_In_Excel_2003.xls'

insert into MyFileTable ( FileData, FileExtension, FullFileName)
Select
    (SELECT BulkColumn FROM OPENROWSET( BULK 'D:\TEMP\Found_In_Word.docx', SINGLE_BLOB) as ExternalFile),
    '.docx',
    'Found_In_Word.docx'
GO

insert into MyFileTable ( FileData, FileExtension, FullFileName)
Select
    (SELECT BulkColumn FROM OPENROWSET( BULK 'D:\TEMP\Found_In_Text.txt', SINGLE_BLOB) as ExternalFile),
    '.txt',
    'Found_In_Text.txt'
GO

PRINT 'Wait Start'
GO
WAITFOR DELAY '00:00:05';
PRINT 'Wait End'
GO

DECLARE
    @TestDaten TABLE (NAME varchar (200) NOT NULL, ERGEBNIS varchar (200) NULL);

insert into @TestDaten (NAME) VALUES  ( 'Daheim Lieferservice GmbH' ),
                                      ( 'Arbeiterwohlfahrt Bundesverband e.V.' ),
                                      ( 'Augenarztpraxis Milchmann' ),
                                      ( 'ABC-Pflegedienst' ),
                                      ( 'Sunset Solar KG' ),
                                      ( 'Flitzer Verkehrsgesellschaft mbH' ),
                                      ( 'Autohaus Knusper GmbH' ),
                                      ( 'Bezirksamt Weltende' ),
                                      ( 'Kamm Elektrotechnik GmbH' ),
                                      ( 'Eschsauer Solarstromsysteme GmbH' ),
                                      ( 'Deutsche Bahn' ),
                                      ( 'Hamburg Tourismus GmbH' ),
                                      ( 'Wohnbau GmbH' ),
                                      ( 'Universitätsklinikum Hamburg' ),
                                      ( 'Tchibo Deutschland GmbH' ),
                                      ( 'Schornsteinfegermeister Mingsdorf' ),
                                      ( 'Vollkornbäckerei Erntefrisch' )

DECLARE crs_Test CURSOR FOR
    select NAME from @TestDaten;

declare @name           varchar (200),
        @Suchtext       varchar (200),
        @Ergebnis       varchar (200),
        @length         int;

OPEN crs_Test

WHILE ( 1 = 1 )
BEGIN
    FETCH crs_Test INTO @name;

    IF @@fetch_status <> 0
        BREAK;

    set @Ergebnis = '';

    SET @Suchtext = '"' + @name + '"';

    select @Ergebnis = @Ergebnis + isnull (FullFileName, '') + ' / ' from MyFileTable
    WHERE  CONTAINS(FileData, @Suchtext);

    set @length = len (@Ergebnis);

    if (@length > 3)
        SET @Ergebnis = substring (@Ergebnis, 1, @length - 2);

    update @TestDaten set ERGEBNIS = @Ergebnis where NAME = @name;
END

CLOSE crs_Test;

select * from @TestDaten

set NOCOUNT OFF
GO

Ergebnis:

NAME    ERGEBNIS
Daheim Lieferservice GmbH    Found_In_Word.docx / Found_In_Text.txt
Arbeiterwohlfahrt Bundesverband e.V.    Found_In_Word.docx / Found_In_Text.txt
Augenarztpraxis Milchmann    Found_In_Word.docx / Found_In_Text.txt
ABC-Pflegedienst    Found_In_Word.docx / Found_In_Text.txt
Sunset Solar KG    Found_In_Excel.xlsx / Found_In_Excel_2003.xls / Found_In_Word.docx / Found_In_Text.txt
Flitzer Verkehrsgesellschaft mbH    Found_In_Word.docx / Found_In_Text.txt
Autohaus Knusper GmbH    Found_In_Excel.xlsx / Found_In_Excel_2003.xls / Found_In_Word.docx / Found_In_Text.txt
Bezirksamt Weltende    Found_In_Excel.xlsx / Found_In_Excel_2003.xls / Found_In_Word.docx / Found_In_Text.txt
Kamm Elektrotechnik GmbH    Found_In_Excel.xlsx / Found_In_Excel_2003.xls / Found_In_Word.docx / Found_In_Text.txt
Eschsauer Solarstromsysteme GmbH    Found_In_Word.docx / Found_In_Text.txt
Deutsche Bahn    Found_In_Excel.xlsx / Found_In_Excel_2003.xls / Found_In_Word.docx / Found_In_Text.txt
Hamburg Tourismus GmbH    Found_In_Excel.xlsx / Found_In_Excel_2003.xls / Found_In_Word.docx / Found_In_Text.txt
Wohnbau GmbH    Found_In_Excel.xlsx / Found_In_Excel_2003.xls / Found_In_Word.docx / Found_In_Text.txt
Universitätsklinikum Hamburg    Found_In_Word.docx / Found_In_Text.txt
Tchibo Deutschland GmbH    Found_In_Word.docx / Found_In_Text.txt
Schornsteinfegermeister Mingsdorf    Found_In_Word.docx / Found_In_Text.txt
Vollkornbäckerei Erntefrisch    Found_In_Word.docx / Found_In_Text.txt

Das heißt in Word und im Text-File wird alles gefunden, in den Excel-Files aber nur 7 von 17 mal.

Hat jemand eine Erklärung dafür, oder ist das ein Bug?


Viewing all articles
Browse latest Browse all 1772

Latest Images

Trending Articles

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>