/
  • جستجو با FULLTEXT در MySQL

  • ارسال پاسخ   امتیاز موضوع:
    • 2 رأی - میانگین امیتازات: 5
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی جستجو با FULLTEXT در MySQL
    نویسنده پیام
    k2-4u آفلاین
    LAMP Programmer
    ***

    ارسال‌ها: 88
    تاریخ عضویت: ۱۳۸۸ مرداد ۲۱
    اعتبار: 4
    تشکرها : 64
    ( 218 تشکر در 56 ارسال )
    ارسال: #1
    جستجو با FULLTEXT در MySQL
    نوع داده FULLTEXT . برای فیلد های هست که شما . می خواهید با سرعت در محتویات آنها جستجو کنید
    برای استفاده از روش ایندکس گذاری full-text . به موارد زیر دقت کنید

    1. ایندکس گذاری full-text فقط برای جدول های MyISAM و نوع های CHAR ,VARCHAR , TEXT
    قابل استفاده است

    2. ایندکس گذاری full-text باید موقع ساخت جدول و در دستور CREATE TABLE و یا تغییر ساختار جدول (ALTER TABLE CREATE INDEX ) استفاده شود

    3 . در مواقعی که حجم اطلاعات خیلی زیاد است . عدم استفاده از full-text سرعت بیشتری دارد


    در عمل :
    همون طور که گفته شد . full-text رو در هنگام ساخت جدول . باید در نظر گرفت
    ما در مثال زیر . یک مطلب داریم که . می خواهیم عنوان مطلب و خود مطلب رو full-text کنیم تا بتونیم
    بعدا با امکانات و سرعت بالا در اونا جستجو کنیم

    کد:
    CREATE TABLE articles (
        id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
        title VARCHAR(200),
        body TEXT,
        FULLTEXT (title,body)
    );
    همان طور که میبینید . بعد از تعریف ستون های id , body و title
    دو ستون title و body در آخر دستور به وسیله عبارت FULLTEXT
    FULLTEXT در نظر گرفته شده اند

    بعد از ساخت جدول . شما می توانید جدول را با محتوات دلخواه پر کنید
    .
    و حالا برای جستجو در این جدول
    از دستور AGAINST MATCH به چندین شکل استفاده می شود
    به مثال های زیر دقت کنید

    در MATCH نام ستون های FULL TEXT مورد نظر که قصد دارید در آنها جستجو کنید قرار میگیرد
    و در AGAINST کلمه کلیدی مورد نظر

    1 . بعد از WHERE (این روش کم هزینه ترین روش است )
    کد:
    SELECT *  FROM  articles  WHERE  MATCH (title,body) AGAINST ('search me....');

    2. می تواند یکی از مقادیر قبل از FROM باشد . (در این مثال نتیجه جستجو در نام فرضی score قرار می گیرد )
    کد:
    SELECT id, body, MATCH (title,body) AGAINST ('search Me..') AS score FROM articles WHERE (...)

    و 3 . می تواند ترکیبی از این دو مثال بالا یا ... باشد


    AGAINST MATCH چهار حالت . برای جستجو دارد .
    که در ادامه گفته میشود .
    مثال های بالا یکی از این روش ها است
    ۱۳۸۸ بهمن ۲۱ ۰۷:۵۳ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : admin zoghal nasserghiasi amir.s cyletech hosseintdk775 Bojbaj iroveb
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,734
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6196 تشکر در 3438 ارسال )
    ارسال: #2
    RE: جستجو با FULLTEXT در MySQL
    عالی بود
    البته در مورد
    کد PHP:
    SELECT idbodyMATCH (title,bodyAGAINST ('search Me..') AS score FROM articles WHERE (...) 
    score‌ درصد انتطباق هست.
    ۱۳۸۸ بهمن ۲۱ ۰۸:۰۶ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : hosseintdk775 iroveb
    k2-4u آفلاین
    LAMP Programmer
    ***

    ارسال‌ها: 88
    تاریخ عضویت: ۱۳۸۸ مرداد ۲۱
    اعتبار: 4
    تشکرها : 64
    ( 218 تشکر در 56 ارسال )
    ارسال: #3
    RE: جستجو با FULLTEXT در MySQL
    نقل قول: score‌ درصد انتطباق هست.
    کلمه AS برای تعریف نام جدید
    برای یک ستون یا ... استفاده می شه
    مثلا
    کد:
    SELECT hello_world AS  hw,salam_khobi  AS  salam  FROM  tbname;

    خب ؟ درصد انتطباق ؟ داستان چیه ؟ Exclamation
    ۱۳۸۸ بهمن ۲۱ ۰۸:۰۹ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,734
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6196 تشکر در 3438 ارسال )
    ارسال: #4
    RE: جستجو با FULLTEXT در MySQL
    درسته As برای نام مستعار هست منظور من مقداری هست که AGAINST ('search Me..') وقتی که در قسمت select میاد‌ هست. که در این صورت میزان‌ انطباق هست
    با توجه به مثالی که خود mysql زده دستوری که شما دادین این مقدار رو بر می گردونه
    کد PHP:
    +----+------------------+
    id score            |
    +----+------------------+
    |  
    0.65545833110809 |
    |  
    |                |
    |  
    0.66266459226608 |
    |  
    |                |
    |  
    |                |
    |  
    |                |
    +----+------------------+ 

    شما بر اساس این مقدار می تونید sort کنید و در این صورت مقداری که بیشتر شبیه به مورد جستجو هست رو اول بیارید
    ۱۳۸۸ بهمن ۲۱ ۱۰:۰۹ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : k2-4u nasserghiasi amir.s nazila hosseintdk775 iroveb
    k2-4u آفلاین
    LAMP Programmer
    ***

    ارسال‌ها: 88
    تاریخ عضویت: ۱۳۸۸ مرداد ۲۱
    اعتبار: 4
    تشکرها : 64
    ( 218 تشکر در 56 ارسال )
    ارسال: #5
    Natural Language Full-Text
    حالت . پیشفرض . Full-Text
    IN NATURAL LANGUAGE MODE
    این حالت مانند مثال قبل است
    2 کوئری زیر . هر دو یکی هستند
    کد:
    SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('database' IN NATURAL LANGUAGE MODE);
    و
    کد:
    SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('database');

    در این حالت . رشته وارد شده در AGAINST جستجو میشود
    این حالت به حروف کوچک و بزرگ حساس نیست .مگر اینکه نوع داده ستون آن BINARY باشد
    همچنین شما نمی تونید به وسیله هیچ کارکتری (مانند " ' , و... )
    حروف را از هم جدا کنید .

    2 مورد زیر در جستجو IN NATURAL LANGUAGE MODE حدف می شود

    الف : حروف خیلی کوچک حدف میشوند و در نظر گرفته نمی شوند (زیر 4 کارکتر )
    ب : حروف stopword . مانند THe And و ...
    طبق لیست زیر
    http://dev.mysql.com/doc/refman/5.1/en/f...words.html
    حدف می شوند (توجه این مورد به زبان فارسی مربوط نیست )

    البته توجه داشته باشید که لیست stopword ها و
    طول حروف قابل تعییر است (تغییرات در سرور اصلی و .... )
    http://dev.mysql.com/doc/refman/5.1/en/f...uning.html
    ۱۳۸۸ بهمن ۲۲ ۱۲:۵۵ صبح
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : admin amir.s nazila hosseintdk775 cyletech
    nazila آفلاین
    عضو جدید
    **

    ارسال‌ها: 1
    تاریخ عضویت: ۱۳۹۰ فروردين ۸
    اعتبار: 0
    تشکرها : 2
    ( 0 تشکر در 0 ارسال )
    ارسال: #6
    RE: جستجو با FULLTEXT در MySQL
    خیلی مفید بود.
    من یک مشکل در این زمینه دارم
    با این روش نمیتوانم چند فیلد جدول را با هم بررسی کنم در صورتی که هر کدام به تنهایی درست کار میکنند.
    مثلا:
    کد PHP:
    $query="SELECT * FROM `balatarin` WHERE MATCH (`title`) AGAINST ('$value')"
    این به درستی کار میکند
    و همچنین:
    کد PHP:
    $query="SELECT * FROM `balatarin` WHERE MATCH (`describe`) AGAINST ('$value')"
    هم به درستی کار می‌کند
    ولی حالت ترکیبی که در مثال شما هم هست کار نمی‌کند:
    کد PHP:
    $query="SELECT * FROM `balatarin` WHERE MATCH (`title`,`describe`) AGAINST ('$value')"

    اشکال از کجا می‌تونه باشه؟ از نسخه مای اسکیوال؟
    اگه اینطوری بود چطور می‌تونم با اس کیو ال نتایج دو جستجو را با هم ترکیب کنم که همین کار را پیاده سازی کند؟
    فعلا به این کد رسیدم که ظاهراً خوب هم جواب می‌ده :
    کد PHP:
    $query="SELECT `title`,`describe`, MATCH (`describe`) AGAINST ('$value' IN NATURAL LANGUAGE MODE) 
    AS `score` FROM `balatarin` WHERE MATCH (`title`) AGAINST ('
    $value') ORDER BY score desc limit 200"

    منبع
    (آخرین ویرایش در این ارسال: ۱۳۹۰ فروردين ۸ ۱۲:۳۴ عصر، توسط nazila.)
    ۱۳۹۰ فروردين ۸ ۱۲:۲۲ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    « قدیمی تر | تازه‌ تر »

    ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS