2017-10-15 4 views
0

だから、このようなクエリは、非空のセットを返すだろうと:唯一のレコードのname属性が「some_text」です表からInnoDBでアンダースコアを別々の単語として扱うようなフルテキストインデックスを構築するにはどうすればよいですか?

SELECT * FROM mytable WHERE MATCH(name) AGAINST ('+some +text' IN BOOLEAN MODE);

を。基本的には、ドットやハイフンと同じようにフルテキストインデックスを作成するときに、InnoDBに区切り文字としてアンダースコアを扱わせたいと思っています。これは、mysqlや、デフォルトでこれを持っているサードパーティのパーサを使ってもネイティブにどうしたらいいですか? ありがとう

編集:最も簡単な解決法は、列を複製してそこにある単語を分離して索引を作成することですが、索引を作成することはわかりますが、必要ではない場合はそうしないでください。テーブルには何百万もの行があります。

答えて

0

単語を定義する文字を変更しようとしています。探す場所はdocumentationで、検索の微調整についてです。具体的には、単語に許可されている文字を制御し、_を単語以外の文字にしたいとします。

一つのお勧めの方法は、文字設定ファイルを変更することです: - 単語 文字として(「」)

あなたはハイフン文字を扱いたいと仮定します。次のいずれかの方法を使用してください:

。 。

  • 文字セットファイルを変更します。これは再コンパイルする必要はありません。 true_word_char()マクロは、「文字型」テーブルを使用して、 の文字と数字を他の文字と区別します。 。文字セットXMLファイルの1つの配列の の内容を に編集することができます。「 - 」が「文字」であることを指定します。次に、FULLTEXTインデックス の文字セットを使用します。配列 の形式については、10.3.1項「キャラクタ定義配列」を参照してください。

唯一の欠点は、すべてのフルテキストインデックスに影響することです。

代わりに、下線をスペースで置き換えてその上に全文索引を作成する2番目の列を定義することもできます。

インデックス固有のアプローチを使用する場合は、独自の照合順序を定義することもできます。

注:最小ワードサイズに注意する必要があります。デフォルトは3または4です。小さい単語は無視されます。

関連する問題