質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

解決済

1回答

2019閲覧

SQLServerのフルテキストインデックス検索結果不完全で困ってます

LambdaD

総合スコア4

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

0クリップ

投稿2020/04/10 06:46

編集2020/04/13 00:29

お世話になります。

前提・実現したいこと

フルテキストインデックスを作成して、
「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でした、多分あまり関係ない

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

varcharは全角非推奨らしい、
ExtractTextのデータ型をnvarchar(MAX)に変更したら解決

投稿2020/04/14 08:04

LambdaD

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問