2013-05-16 20 views
7

私はこの記事に関する質問があります:http://dev.mysql.com/doc/refman/5.6/en/fulltext-natural-language.htmlmysql - 全文索引 - 自然言語モードとは何ですか?

は、ここで私は、私は理解していない何

SELECT * FROM articles 
WHERE MATCH (title,body) 
AGAINST ('database' IN NATURAL LANGUAGE MODE); 

ようなクエリを見つけ、正確に、自然言語モードで何ですか?私はどこにも正確な定義がないと思う。

any1で定義できますか?どのように機能するのですか?

答えて

14

MySQLの自然言語全文検索は、最も関連性の高い検索結果を見つけるために、検索クエリをコーパスと照合することを目的としています。だから、「私はパイが大好き」という記事があり、d1、d2、d3というドキュメントがあるとします。文献1と2はそれぞれスポーツと宗教に関するものであり、文献3は食料に関するものである。記事からあなたのクエリ、

SELECT * WHERE( 自然言語MODE IN 'とデータベース')との試合(タイトル、本文)。

d3が記事と最もよく一致するため、d3、d2、d1(記事の並び順に応じてd2、d1のランダムな順序)を返します。

MYSQLが使用する基礎となるアルゴリズムはおそらくtf-idfアルゴリズムです。ここで、tfは単語の頻度を表し、idfは文書の頻度の逆数です。 tfは、文書内の単語wが文書内で出現する回数だけです。 idfは、その単語がどれだけ多くの文書に存在するかに基づいています。だから、多くの文書に出現する言葉は、最も代表的な文書の決定には寄与しません。 tf * idfの積は得点が高くなりますが、単語が文書をよりよく表します。だから、「パイ」は文書d3にしか現れず、したがって高いtfと高いidfを持ちます(逆数なので)。 'the'は高いtfを持ちますが、低いidfを持ち、tfから出て低得点になります。

MYSQL自然言語モードには、ストップワード(、など)も含まれており、4文字未満の単語を削除します。あなたが提供したリンクに表示されます。

いくつかの単語は、フルテキスト検索では無視されています

Any word that is too short is ignored. The default minimum length of words that are found by full-text searches is three characters for 

のInnoDB検索インデックス、またはMyISAMのための4つの文字が。 のカットオフを制御するには、 インデックスを作成する前に設定オプションを設定します。InnoDB検索 インデックスの場合はinnodb_ft_min_token_size設定オプション、MyISAMの場合はft_min_word_lenです。

Words in the stopword list are ignored. A stopword is a word such as “the” or “some” that is so common that it is considered to have 

ゼロセマンティック値。ビルトインのストップワードリストがありますが、ユーザ定義のリストによってオーバーライドされた になる可能性があります。ストップワードリストと関連する 設定オプションは、InnoDB検索インデックスと MyISAMインデックスでは異なります。ストップワード処理は、InnoDB検索インデックスの場合は の設定innodb_ft_enable_stopword、innodb_ft_server_stopword_table、 およびinnodb_ft_user_stopword_table、MyISAMの場合は ft_stopword_fileという設定によって制御されます。

関連する問題