私の現在のクエリ:
SELECT SCHOOL_NAME, TOWN, POSTCODE, COUNTRY, COUNTY, id FROM schools
WHERE MATCH(LA_NAME, SCHOOL_NAME, STREET, LOCALITY, ADDRESS3, TOWN, COUNTY)
AGAINST ("southwark") AND COUNTRY = 'gb' limit 0,5;
戻ってきます(健全性のために一部のデータを削除しました):
Southwark Park School
The Cathedral School of St Saviour and St Mary Ove...
Harris Academy Bermondsey
Southwark Inclusive Learning Service KS3, KS4 & Si...
St George's Cathedral Catholic Primary School
サザーク小学校はこれらの結果に含まれていないことに注意してください
このクエリを実行すると
SELECT SCHOOL_NAME FROM schools WHERE `SCHOOL_NAME` LIKE '%southwark%' LIMIT 0 , 3
私の返された応答は
City of London Academy (Southwark)
Southwark Primary School
Southwark Park School
キーポイント: サザーク小学校は、ここの結果で利用できます。これは、自然言語の検索結果に欠けているものです。
説明ショー:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE schools fulltext LA_NAME LA_NAME 0 1 Using where
そのため、何らかの理由で自然言語検索がうまく機能していません。ブールモードで遊んでみましたが、うまくいきません。私が間違っているかもしれないことに誰かが光を当てることができますか?
注:最初のクエリの制限を 0.50 に変更しても、まだサザーク小学校は表示されません。
編集:自然言語検索を制限 0,240 に変更すると、結果 #238 として結果が得られます。
編集#2
myisam_ftdump mydatabase/schools 1 -c | grep southwark
戻り値:
108 7.7915840 southwark
更新: LA_NAME には Southwark の値があるように見えるので、多くの値にそれが含まれています。この問題を特定するために myisam_ftdump を使用しました。私は今、修正について熟考することができます。
修正:これを修正するには、フルテキストを変更して LA_NAME を含めないようにしなければなりませんでした。また、IE の郵便番号が実際には必要ではない他のデータも削除しました。また、削除したフィールドを使用しないように MySQL クエリを変更しました。