MySQLのクエリの対称差や選言組合

chillywilly:

二つ以上のキーワードの顧客を検索した場合、私は、MySQLの結果の2セットを返す必要があります。

1)一次結果:これらのキーワードの交差(のみすべてのキーワードに一致する項目)

2)二次の結果:キーワード(一部ではなくすべてのキーワードに一致する項目)の対称差/選言組合に一致するアイテム

私はBOOLEANモードを使用してクエリ#1を実行することができ+、各キーワードの前に看板。私は残すことによって、両方の#1と#2を含むクエリを実行することができます+記号をオフにしますが、私は#2で説明した目的の結果を取得する方法がわかりません。助言がありますか?

Booboo:

#2のためにあなただけの組み合わせが必要になります。

WHERE MATCH(words) AGAINST('keyword1 keyword2 ... keywordN' IN BOOLEAN MODE)
AND NOT MATCH(words) AGAINST('+keyword1 +keyword2 ... +keywordN IN BOOLEAN MODE)

これは、少なくとも一つのキーワードではなく、すべてを持っている行を返します。または私はあなたの質問を誤解していますか?

スキーマ(MySQLのV8.0)

create table test (
  id int not null auto_increment primary key,
  words text not null,
  FULLTEXT idx (words)
  );

  insert into test(words)
     values('Arc Book Cow Dog'), ('Book Cow Fox'), ('Arc Book Cow Fox'), ('Book Cow');

クエリ#1

SELECT *
FROM test
WHERE MATCH(words) AGAINST('Arc Fox' IN BOOLEAN MODE)
      AND NOT MATCH(words) AGAINST('+ARC +Fox' IN BOOLEAN MODE)
ORDER BY id;

| id  | words            |
| --- | ---------------- |
| 1   | Arc Book Cow Dog |
| 2   | Book Cow Fox     |

DBフィドル上に表示します

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=298775&siteId=1