1

問題があります。

私のMySql dbには、製品テーブルに40000行あります。テーブルにはT9Textという列があります。私の行の 1 つ T9Text 領域は次のようになります。

UNISNLS106B UNI.SNLS 106B SNLS-106B M.OT. 12V 2DelíkMotorCraftTípāUnipoint66-205 66205 F02Z-11390-A F02Z11390A E90Z-11390-A E90Z11390A F4DZ-11390-A F4DZ11390A F37790-A F3VY1390ZZZZZZZZZZZZZ11390A

オートコンプリート プロセスのために、db でストアド プロシージャを実行します。それはそのようなものです:

SELECT p.Code, 
  p.Name,
  p.`T9Text`,
  MATCH (p.T9Text) AGAINST ('+UNI* +SNLS* +106B*' IN BOOLEAN MODE) AS SCORE
FROM product p
WHERE MATCH (p.T9Text) AGAINST ('+UNI* +SNLS* +106B*' IN BOOLEAN MODE) >0
GROUP BY p.Name
ORDER BY SCORE DESC

このように、うまく機能し、1 行だけを返します。

しかし、次のように where 条件を記述する必要があります。

MATCH (p.T9Text) AGAINST ('+*UNI* +*SNLS* +*106B*' IN BOOLEAN MODE) >0

上記のコードでは、1877 行が返されます。プラス記号が機能しないようです

MATCH (p.T9Text) AGAINST ('+*UNISNLS106B*' IN BOOLEAN MODE) >0
MATCH (p.T9Text) AGAINST ('+*NISNLS106B*' IN BOOLEAN MODE) >0

最初のクエリでは 1 行が返されますが、2 番目のクエリでは 0 行が返されます。

それで、私の質問があります: mysql の全文検索では、+テスト式を使用できませんか? そうでない場合、これを行う方法はありますか?(いいねを除く)

4

1 に答える 1

1

ブール全文検索ドキュメントから;

アスタリスクは、切り捨て (またはワイルドカード) 演算子として機能します。他の演算子とは異なり、影響を受ける単語に追加する必要があります。* 演算子の前の単語で始まる単語は一致します。

*つまり、ブール検索は、演算子を使用した「含む」をサポートしていません。

于 2013-06-27T11:28:19.377 に答える