2

ブール検索に問題があります。最初はデータベース/テーブルに問題があると思いましたが、1つの列とサンプル値を持つ次のサンプルテーブルを作成しようとしましたが、結果は同じです。一部の単語では正常に実行され、他の単語では失敗します。 、 何か案は?

正常に実行されるクエリ:

SELECT * FROM `temp` WHERE (match (txt) against ('develo*' IN BOOLEAN MODE)>0 ) 
SELECT * FROM `temp` WHERE (match (txt) against ('devel*' IN BOOLEAN MODE)>0 ) 
SELECT * FROM `temp` WHERE (match (txt) against ('senio*' IN BOOLEAN MODE)>0 ) 

しかし、「second」または「third」という単語に対して同様の検索を実行しようとすると、失敗します。

SELECT * FROM `temp` WHERE (match (txt) against ('secon*' IN BOOLEAN MODE)>0 ) 
SELECT * FROM `temp` WHERE (match (txt) against ('third*' IN BOOLEAN MODE)>0 ) 

---以下はサンプルテーブルと値です-----

CREATE TABLE IF NOT EXISTS `temp` (
  `txt` varchar(30) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Dumping data for table `temp`
--

INSERT INTO `temp` (`txt`) VALUES
('developer'),
('Developer'),
('Developer senior'),
('senior developer'),
('second job'),
('job second'),
('third'),
('third job'),
('job third');
4

1 に答える 1

2

ストップワード リストは BOOLEAN MODE マッチに適用されるため、単語およびsecondthirdエンジンによって無視されます。

ここで説明されているように、デフォルトのストップワード リストを独自のもので上書きできます。

デフォルトのストップワード リストをオーバーライドするには、ft_stopword_fileシステム変数を設定します。[...] 変数値は、ストップワード リストを含むファイルのパス名にするか、ストップワード フィルタリングを無効にする空の文字列にする必要があります。別のディレクトリを指定するために絶対パス名が指定されていない限り、サーバーはデータディレクトリでファイルを検索します。この変数の値またはストップワード ファイルの内容を変更したら、サーバーを再起動してFULLTEXTインデックスを再構築します。

于 2012-10-15T15:09:59.243 に答える