お世話になります。
前提・実現したいこと
フルテキストインデックスを作成して、
「SELECT * FROM 「テーブル名」 WHERE CONTAINS (「カラム名」,'"文字列*"')」を使いたいです。
発生している問題・エラーメッセージ
以下の情報でテーブルを作成します
テーブル名
FULLTEXTINDEXTEST
カラム1:
SEQ 主キー int null不可 IDENTITY
カラム2:
ExtractText varchar(MAX) 全文検索対象
SEQが1~100、ExtractTextが完全同一の文字列のデータ100件をinsertします。
SELECT * FROM FULLTEXTINDEXTEST WHERE CONTAINS (ExtractText,'"100件*"')で検索したら、結果は88件しかない、
SEQが8の倍数のデータ全部出ない。(SEQ=8倍数以外も出ない場合があります)
ExtarctTextの内容が(「約20000字省略」+?+「約20字省略」100件)の感じです。
内容は完全同一のに、何故、SEQが8の倍数の場合だけ出てこないでしょう。(SEQ=8倍数以外も出ない場合があります)
SELECT * FROM FULLTEXTINDEXTEST WHERE ExtractText like '%100件%' なら、100件全部出せる。
該当のソースコード
insert文
go
DECLARE @i AS INT = 1
while (@i <= 100)
begin
INSERT INTO FULLTEXTINDEXTEST VALUES ('「20000文字列省略」SQLServerテスト100件')
set @i = @i + 1
end
go
フルテキストインデックス作成
・カタログ作成
CREATE FULLTEXT CATALOG TEST_CATALOG ON FILEGROUP SECONDARY
・インデックスの作成
CREATE UNIQUE INDEX PK_FULLTEXTINDEXTEST_FULLTEXT ON FULLTEXTINDEXTEST (SEQ);
・フルテキストインデックスの作成
CREATE FULLTEXT INDEX
ON FULLTEXTINDEXTEST (ExtractText)
KEY INDEX PK_FULLTEXTINDEXTEST_FULLTEXT
ON TEST_CATALOG
検索SQL
SELECT * FROM FULLTEXTINDEXTEST WHERE CONTAINS (ExtractText,'"100件*"')
試したこと
UPDATE FULLTEXTINDEXTEST SET ExtractText = (SELECT ExtractText FROM FULLTEXTINDEXTEST WHERE SEQ = 8) WHERE SEQ = 8
行をUPDATEしたら、検索できるようになった、でも根本的解決していないと思います。
PK_FULLTEXTINDEXTEST_FULLTEXTを再構築、再構成するのを試しましたが、何も変わらなかった。原因も分かりません。
補足情報(FW/ツールのバージョンなど)
SQLServer 2019でした、多分あまり関係ない
回答1件
あなたの回答
tips
プレビュー