2017-03-29 7 views
1

たとえば、説明、エイリアスフィールドを持つitem_tableがあります。どちらも、FULLTEXT KEY ft_desc_alias_ngram(、alias)のように索引付けされています。著作権(©)、商標(™)、登録®などの特殊文字を使用してmysqlで全文検索を行うにはどうすればよいですか?

そして、私のようないくつかの項目があります。今、私は©持つアイテム、または®©®™誰を検索したい

Test Item 1 © 
Test Item 2 ® 
Test Item 3 ™ 
Test Item 4 © ® ™ 

を。 は、私は、クエリを使用しています唯一©検索するには:

SELECT * FROM item_table WHERE match(description, alias) Against('©' IN NATURAL LANGUAGE MODE); 

が、見つかりませ結果を得ていません。

答えて

0

MySQLのビルトインフルテキストパーサでない単一の文字のために、searching for wordsのために設計されており、これらの設定は、短い3または4言葉よりも言葉を取得しないことを意味3(innodb)または4(myisam)のデフォルトの最小ワード長の設定が付属しています索引付けされ、フルテキスト検索では見つかりません。これらの制限を変更すると、フルテキストインデックスを再構築する必要がありますが、デフォルトのフルテキストパーサーは実際には単一の文字を検索するためのものではありません。また、myisamテーブルの自然言語モード検索では、その単語がノイズとみなされるため、レコードの50%以上に現れる単語の結果は返されません。

フルテキストインデックスを使用して単一の文字を検索する場合は、文字だけを検索するのではなく、トークンサイズを1に設定したMySQLのngram parserを使用します。

ただし、このインデックスは同じフィールド内の単語を検索するのには役立ちません。

+0

ありがとう@Shadow、あなたのポイントを持っていますが、以下の構文でも結果が得られません:対抗する( 'Test©' NATURAL LANGUAGE MODE) –

+0

デフォルトの全文パーザーは単語を索引付けします。スペースは明らかに単語区切り文字と見なされるので、 'Test @'にマッチする全文索引の項目を決して持つことはありません – Shadow

関連する問題