4

私は自分のサイトに小さな検索機能を構築しています。ユーザーのクエリを取得し、キーワードをステミングしてから、ステミングされたキーワードに対してフルテキストの MySQL 検索を実行しています。

問題は、MySQL がステムをリテラルとして扱っていることです。起こっているプロセスは次のとおりです。

  1. ユーザーが「野球」などの単語を検索する
  2. 私のステミング アルゴリズム (Porter Stemmer) は、「野球」を「野球」に変換します。
  3. "baseball" と "baseballs" の一致が存在する必要がありますが、fulltext で "basebal" に一致するものは見つかりません。

フルテキストで LIKE 'basebal%' に相当することを行うにはどうすればよいですか?

編集:

これが私の現在のクエリです:

SELECT MATCH (`title`,`body`) AGAINST ('basebal') AS `relevance`,`id` FROM `blogs` WHERE MATCH (`title`,`body`) AGAINST ('basebal') ORDER BY `relevance` DESC
4

3 に答える 3

6

最後にアスタリスクを付けるとうまくいくと思います: basebal*. 詳細については、このページ*のオペレーターを参照してください。

于 2010-01-14T04:16:05.693 に答える
0

このリンクを参照してください.ステミングはMySQLにデフォルトでインストールされていませんが、自分でインストールできます..

http://oksoft.blogspot.com/2009/05/stemming-words-in-mysql.html

于 2012-07-16T11:12:30.937 に答える
0

IN NATURAL LANGUAGE MODEはデフォルトのモードであり、ステミングとは互換性がありません。IN BOOLEAN MODEワイルドカードを試してみてください...

SELECT MATCH (`title`, `body`) AGAINST ('basebal*' IN BOOLEAN MODE) AS `relevance`, `id` FROM `blogs` WHERE MATCH (`title`, `body`) AGAINST ('basebal*' IN BOOLEAN MODE) ORDER BY `relevance` DESC

上記の例は、質問されてから 10 年後にこの質問に出くわした人々を明確に示しています。トピックは依然として関連性があり、完全な例から恩恵を受ける

于 2020-05-01T14:19:36.013 に答える