MySQL ਨੂੰ ਪੂਰਾ ਪਾਠ ਦੀ ਖੋਜ

ਅੱਜ ਮੈਨੂੰ ਇੱਕ ਹੌਲੀ ਨੂੰ ਅਨੁਕੂਲ ਕਰਨ ਲਈ ਖੇਡੇ SQL genus ਦੀ ਐਪਲੀਕੇਸ਼ਨ

SELECT * FROM 'table' WHERE `field` LIKE '%word%'

ਕਿੱਥੇ ਹੁਣ ਇੱਥੇ ਸਮੱਸਿਆ ਹੈ – ਪਿਛਲੇ ਹਿੱਸੇ ਨੂੰ '% ਸ਼ਬਦ ਦਾ%’ ਅਤੇ ਹੋਰ ਵੀ ਖਾਸ ਅੱਖਰ ਵਿੱਚ % ਸ਼ਬਦ ਨੂੰ ਅੱਗੇ, ਜੋ ਕਿ ਕੀ. wildcard ਪ੍ਰਤੀਕ % ,ਕੋਈ ਵੀ ਮੁੱਲ ਦੇ ਅੱਗੇ, ਸਾਨੂੰ ਸਿੱਧੇ ਹੌਲੀ ਵਿੱਚ ਸਿੱਧਾ ਕਿਊਰੀ ਕਰਦਾ ਹੈ, ਕਿਉਕਿ ਇਸ ਤਰੀਕੇ ਨਾਲ ਕਾਰਜ ਨੂੰ ਸਾਡੇ ਨਾਲ ਰੁਕ ਸੂਚਕ ਫੀਲਡ ਵਰਤਣ ਲਈ. ਫ਼ੈਸਲੇ ਹਮੇਸ਼ਾ ਦੇ ਤੌਰ ਤੇ, ਪਰ ਹਮੇਸ਼ਾ ਸਾਫ ਨਾ 😆 ਓਵਰਆਲ MySQL ਉਹ ਇਸ ਸਮੱਸਿਆ ਦਾ ਹੱਲ ਹੈ ਪੂਰਾ-ਟੈਕਸਟ ਖੋਜ ਇੰਡੈਕਸਿੰਗ ਖੇਤਰ. ਕਰਨਾ ਖੇਤ ਨੂੰ ਬਦਲਣ ਕਰਦਾ ਹੈ ਲਿਖਿਆ ਦਸਤਾਵੇਜ਼ ਦੀ ਇੱਕ ਬਹੁਤ ਕੁਝ ਹੈ, ਪਰ ਛੇਤੀ ਕਰਨਾ ਚੋਟੀ ਦੇ ਬੇਨਤੀ ਨੂੰ ਤਬਦੀਲ ਕਰਨ ਲਈ ਦਾ ਵਰਣਨ ਕਰੇਗਾ, ਕਿਉਕਿ ਸਾਨੂੰ ਇੱਕ ਛੋਟਾ ਜਿਹਾ ਡਰਾਮਾ ਕਰਨ ਅੰਤ ਪ੍ਰਾਪਤ ਕਰੋਗੇ. ਉਪਰੋਕਤ ਲਾਗੂ-ਟੈਕਸਟ ਖੇਤਰ ਦੇ ਰੂਪ ਵਿੱਚ Sledka, ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਦੀ ਕਿਸਮ ਵਿੱਚ ਬਦਲਾਅ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ:

SELECT * FROM `table` WHERE MATCH (field) AGAINST ('word')

ਇਸ ਬਣਤਰ ਸਪੱਸ਼ਟ ਹੈ ਅਤੇ ਕੋਈ ਵੀ ਬੇਲੋੜੀ ਚਰਚਾ ਦੀ ਲੋੜ ਹੈ. ਉਪਰੋਕਤ ਸਵਾਲ ਫੋਰਸ ਵਿੱਚ ਪ੍ਰਵੇਸ਼ ਕਰੇਗਾ, ਜੇਕਰ ਇਹ ਸ਼ਬਦ ਦਾ, ਤੁਹਾਨੂੰ ਘੱਟੋ-ਘੱਟ ਇੱਕ ਬੇਨਤੀ ਕਰ ਲਈ 4 ਨਿਸ਼ਾਨ, ਮੂਲ ਮੁੱਲ ਹੈ, ਤੁਹਾਨੂੰ ਮੁੱਲ ਨਿਰਧਾਰਿਤ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ ਨੂੰ ਤਬਦੀਲ ਕਰਨ ਲਈ ਚਾਹੁੰਦੇ ਹੋ, ਜੇਕਰ, която желаете в my.cnf в частта [mysqld] ਐਲਾਨ ft_min_word_len= 3 ਜ 2, 1 не е добър избор очевидно 😉 . ਤੁਹਾਨੂੰ ਮੁੱਲ ਅਤੇ ਚਾਲੂ MySQL ਸਰਵਰ-ਇੱਕ ਨੂੰ ਆਪਣੇ ਟੇਬਲ 'ਤੇ ਮੁਰੰਮਤ ਨੂੰ ਕੀ ਕਰਨ ਦੀ ਲੋੜ ਹੈ ਨੂੰ ਬਦਲ ਦੇ ਬਾਅਦ, ਨਵ ਇੰਡੈਕਸਿੰਗ ਲਈ ਫੋਰਸ ਵਿੱਚ ਪ੍ਰਵੇਸ਼. ਇਸ ਲਈ ਹੁਣ ਤੱਕ ਹਰ ਚੀਜ਼ ਸਾਫ: ਬਦਲਾਅ ਕਰਨ, ਰੀਸੈਟ, ਇੰਡੈਕਸ rebildvam ਅਤੇ ਮੇਰੇ ਲਈ ਬੇਨਤੀ ਕਰੋ ਅਤੇ ਰਿਟਰਨ ਕਰਦੇ 0 ਕ੍ਰਮ ਦੇ ਨਾਲ ਚੈੱਕ 😀

SHOW VARIABLES

ਮੈਨੂੰ ਪਤਾ ਹੈ ਕਿ ਮੁੱਲ, ਮੈਨੂੰ ਫੋਰਸ ਵਿਚ ਪੁੱਛਿਆ ਕਿ ਕੀਤਾ ਹੈ, ਨੂੰ ਫਿਰ ਇੰਡੈਕਸ rebildvam – ਉਸੇ ਹੀ ਨਤੀਜਾ ਹੈ. ਕੋਝਾ 🙄, ਬਹੁਤ ਹੀ ਬੇਚੈਨ. ਇੱਥੇ ਇਸ 'ਤੇ ਇੱਕ ਵੱਡੇ ਫ਼ਿਟਕਾਰ ਅਤੇ ਸ਼ੈੱਡ 😀 ਜੋ ਕਾਫ਼ੀ ਸੀ ਦੀ ਕੁੰਜੀ ਵਲੂੰਧਰਨ ਸ਼ੁਰੂ ਕੀਤਾ, ਪਰੈਟੀ ਦਿਲਚਸਪ. ਸਾਰੀ 'ਤੇ, ਮੈਨੂੰ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਪੜ੍ਹਨ ਲਈ ਹੈ, ਜੋ ਕਿ ਸੜਕ ਨੂੰ ਪਤਾ ਨਾ ਕਰਦੇ ਸ਼ੁਰੂ ਕੀਤਾ ਹੈ ਅਤੇ ਇੱਕ ਦਿਲਚਸਪ ਬੀਤਣ ਕਰਨ ਲਈ ਆਇਆ ਸੀ

Such a technique works best with large collections (ਵਾਸਤਵ ਵਿੱਚ, ਇਸ ਨੂੰ ਧਿਆਨ ਨਾਲ ਇਸ ਤਰੀਕੇ ਨਾਲ ਸੁਧਾਰਿਆ ਗਿਆ ਸੀ). ਬਹੁਤ ਹੀ ਛੋਟੇ ਟੇਬਲ ਲਈ, ਸ਼ਬਦ ਨੂੰ ਵੰਡ ਦੀ ਸਹੀ ਨੂੰ ਆਪਣੇ ਅਰਥ ਮੁੱਲ ਨੂੰ ਪ੍ਰਗਟ ਨਾ ਕਰਦਾ, ਅਤੇ ਇਸ ਮਾਡਲ ਨੂੰ ਕਈ ਵਾਰ ਅਨੋਖਾ ਨਤੀਜੇ ਪੈਦਾ ਕਰ ਸਕਦਾ ਹੈ. ਉਦਾਹਰਣ ਲਈ, ਪਰ ਸ਼ਬਦ "MySQL ਨੂੰ" ਪਿਛਲੇ ਵੇਖਾਇਆ ਲੇਖ ਸਾਰਣੀ ਦੇ ਹਰ ਕਤਾਰ ਵਿਚ ਮੌਜੂਦ ਹੈ, ਸ਼ਬਦ ਲਈ ਇੱਕ ਖੋਜ ਕੋਈ ਨਤੀਜੇ ਪੈਦਾ

ГРЕДА 😳 Дам табличката ми беше малка – ਪਰ ਇਸ ਨੂੰ ਇੱਕ ਟੈਸਟ ਸੀ. 'ਤੇ ਇੱਕ ਵਿਸ਼ਾਲ ਸਾਰਣੀ ਵਿੱਚ ਸਾਡੇ ਕਾਰਜ ਨੂੰ 2 000 000 ਕ੍ਰਮ ਅਤੇ ਉੱਥੇ ਕੁਝ ਸੁੱਤੇ. ਨਾਲ ਨਾਲ ਹੁਣ ਸਾਫ ਸਮੱਸਿਆ ਨੂੰ. ਆਸਮਾਨ ਸਾਫ ਫੈਸਲਾ ਕਰਨ ਲਈ, ਮੈਨੂੰ ਸੰਖੇਪ ਜ਼ਿਕਰ ਹੋਵੇਗਾ, ਹੈ, ਜੋ ਕਿ ਪੂਰਾ ਪਾਠ ਖੋਜ ਨੂੰ ਸਹਿਯੋਗ ਦਿੰਦਾ ਹੈ 3 ਤਕਨੀਕੀ ਮੋਡ BOOLEAN , ਸਮੀਕਰਨ ਅਤੇ ਸਧਾਰਨ ਭਾਸ਼ਾ ਮੂਲ ਰੂਪ ਵਿੱਚ ਪਿਛਲੇ ਕੰਮ. ਢੰਗ ਦਸਤਾਵੇਜ਼ ਚੈੱਕ ਕਰ ਸਕਦਾ ਹੈ ਲਈ, ਮੈਨੂੰ ਕਰਨ ਲਈ ਵਿਆਖਿਆ ਕਰੇਗਾ 2-3 BOOLEAN ਸ਼ਬਦ ਹੈ, ਕਿਉਕਿ ਇਸ ਨੂੰ ਕੁੰਜੀ ਹੈ. ਇਹ ਲਾਜ਼ੀਕਲ ਚਾਲਕ ਅਜਿਹੇ ਸਹਿਯੋਗ ਦਿੰਦਾ ਹੈ ਅਤੇ, ਜ , ਨਾ ਹੈ ਅਤੇ ਇਸ ਲਈ 'ਤੇ ਹੈ ਅਤੇ ਪ੍ਰਸਿੱਧ ਪੈਰ੍ਹੇ ਨਾਲ ਕੁਝ ਜਾਦੂ ਕਰ ਸਕਦੇ ਹੋ, ਇੱਕ, ਹੋਰ ਕੋਈ ਆਦਿ. ਰੱਖੋ ਅਤੇ ਨਿਸ਼ਾਨ *, ਜੋ ਕਿ ਇੱਕ wildcard ਪ੍ਰਤੀਕ ਦੇ ਬਰਾਬਰ ਹੈ % ਇਹ ਫਾਇਦੇਮੰਦ ਹੈ 😉, ਜਦ ਖੋਜ ਸ਼ਬਦ ਦੀ ਲੰਬਾਈ ਵੱਧ ਘੱਟ ਹੈ ft_min_word_len ਜ ਛੋਟੇ ਟ੍ਰੇ ;). ਘੱਟੋ-ਘੱਟ ਮੇਰੇ ਲਈ ਦੇ ਬਾਰੇ ਦੇ ਨਾਲ ਇੱਕ ਸਾਰਣੀ 100 ਕ੍ਰਮ ਸੰਪੂਰਣ ਨੌਕਰੀ ਕਰਦਾ ਹੈ. ਸਿਰਫ ਛੱਡ ਦੇਖਣ ਅਤੇ ਬੇਨਤੀ ਨੂੰ ਪੂਰਾ:

SELECT * FROM `table` WHERE MATCH (field)
AGAINST ('*word*' IN BOOLEAN MODE)

ਇੱਥੇ ਪਲ ਸਾਡੇ ਇੰਡੈਕਸਿੰਗ wildcard ਅੱਖਰ ਦੇ ਨਾਲ ਕੰਮ ਕਰਦਾ ਹੈ ਕਿ ਕੀ ਹੁੰਦਾ ਹੈ – ਇਸ ਦਾ ਜਵਾਬ ਮੈਨੂੰ ਪਤਾ ਨਾ ਕਰਦੇ ਹੈ. Принципно мисля, че да, защото не е казано друго в документацията, но в документацията очевидно не се казват или показват много неща 😀

Zemanta ਨਾਲ ਲੈੱਸ

2 ਟਿੱਪਣੀ ਨਹੀਂ

    1. Е при големи таблици вече има други решения 😉 partitions да речем или други механизмни за fulltext search като Sphinx

ਕੋਈ ਜਵਾਬ ਛੱਡਣਾ

ਤੁਹਾਡਾ ਈਮੇਲ ਪਤਾ ਪ੍ਰਕਾਸ਼ਿਤ ਨਹੀ ਕੀਤਾ ਜਾ ਜਾਵੇਗਾ. ਦੀ ਲੋੜ ਹੈ ਖੇਤਰ ਮਾਰਕ ਕੀਤੇ ਹਨ, *

ਵਿਰੋਧੀ ਸਪਮ *