2013-02-08 22 views
7

मैं वास्तव में ऐसी वेबसाइट पर काम कर रहा हूं जहां दो टेबल हैं, लगभग समान हैं, जहां मैक फिर से काम करता है लेकिन दूसरे पर नहीं। यह जानने के लिए कि मैंने इसे सरल करने के लिए क्यों कोशिश की है, "चलिए एक साधारण टेबल काम करते हैं" - लेकिन ऐसा नहीं होता है।MySQL MATCH काम नहीं कर रहा है

मैं phpMyAdmin के साथ परीक्षण कर रहा हूं और यह MySQL 5.1.41 है।

परीक्षण मैं प्रयोग किया जाता का निर्माण तालिका

CREATE TABLE IF NOT EXISTS `test` (
    `id` int(11) NOT NULL, 
    `title` text NOT NULL, 
    `body` text NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

ALTER TABLE `test` ADD FULLTEXT (`title`, `body`); 

परिभाषित करने के लिए ... और मैं देख रहा हूँ है कि वहाँ शीर्षक और शरीर जिसमें एक प्रतिलिपि प्राप्त कुंजी जब मैं परीक्षण से एक शो सूचकांक निम्न करें।

मैं

INSERT INTO `test` (`id`, `title`, `body`) VALUES 
('1', 'Lorem Ipsum', 'Lorem ipsum dolor sit amet, consectetur ... lacus porta euismod.'), 
('2', 'Lorem Ipsum (cont)', 'Nunc leo massa, vulputate ... euismod fringilla.'); 

(कुछ शरीर सामग्री संक्षिप्तता के लिए निकाला गया)

और साथ पंक्तियों की एक जोड़ी सम्मिलित तो जब मैं चलाने

SELECT * FROM `test` WHERE MATCH (`title`, `body`) AGAINST ('consectetur'); 

मैं एक खाली परिणाम सेट प्राप्त - कोई पंक्तियां मिलीं लेकिन अगर मैं

SELECT * FROM `test` WHERE `body` LIKE '%consectetur%'; 
चलाता हूं

तो एक रिकॉर्ड मिला है।

हालांकि मेरे पास MySQL के साथ बहुत अधिक अनुभव है, यह पहली बार है जब मैंने MATCH का उपयोग किया है, तो क्या मैं कुछ दिक्कत कर रहा हूं? यह क्यों काम नहीं कर रहा है? क्या इंडेक्स को बनाया जाना चाहिए (मैंने टेबल पर एक मरम्मत की है) या क्या यह सब स्वचालित रूप से होने वाला है?

बस जानकारी के लिए, टेबल जो काम करता है

CREATE TABLE IF NOT EXISTS `web_pages1` (
    `id` int(11) NOT NULL, 
    `title` varchar(255) DEFAULT NULL, 
    `slug` varchar(255) DEFAULT NULL, 
    `meta_keywords` text, 
    `meta_description` text, 
    `snippet` text, 
    `body` mediumtext, 
    `created_by` int(11) DEFAULT NULL, 
    `date_created` datetime DEFAULT NULL, 
    `date_published` date DEFAULT NULL, 
    `author` varchar(255) DEFAULT NULL, 
    `edited_by` int(11) DEFAULT NULL, 
    `date_edited` datetime DEFAULT NULL, 
    `status` tinyint(4) NOT NULL DEFAULT '1', 
    `parent_id` tinyint(11) DEFAULT NULL, 
    `menu_id` int(11) DEFAULT NULL, 
    `short_name` varchar(255) DEFAULT NULL, 
    `sort_order` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    FULLTEXT KEY `search` (`title`,`slug`,`meta_keywords`,`meta_description`,`snippet`,`body`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

और एक जो मुझे समस्याओं के कारण और मुझे इस मार्ग नीचे भेज दिया जाता है के साथ परिभाषित किया गया है

CREATE TABLE IF NOT EXISTS `web_news1` (
    `id` int(11) NOT NULL, 
    `title` varchar(255) NOT NULL, 
    `slug` varchar(255) NOT NULL, 
    `meta_keywords` text, 
    `meta_description` text, 
    `snippet` text NOT NULL, 
    `body` text NOT NULL, 
    `created_by` int(11) NOT NULL, 
    `date_created` datetime NOT NULL, 
    `date_published` date DEFAULT NULL, 
    `author` varchar(255) DEFAULT NULL, 
    `edited_by` int(11) DEFAULT NULL, 
    `date_edited` datetime DEFAULT NULL, 
    `status` tinyint(4) DEFAULT '0', 
    PRIMARY KEY (`id`), 
    FULLTEXT KEY `search` (`title`,`slug`,`meta_keywords`,`meta_description`,`snippet`,`body`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

है हालांकि मैं परिभाषित करने की कोशिश की है दूसरा बिल्कुल बिल्कुल पसंद है और फिर भी यह काम नहीं करता है।

उत्तर

8

आप अंत में IN BOOLEAN MODE जोड़ने की जरूरत है

SELECT * FROM `test` WHERE MATCH (title, body) AGAINST ('Ipsum' IN BOOLEAN MODE); 

कृपया एक नज़र यहाँ ले:

http://www.sqlfiddle.com/#!2/1b80b/2

+0

बहुत धन्यवाद। यह इसे हल किया गया है। – Ken

4

manual से:

खोज परिणाम रिक्त है क्योंकि शब्द "जो कुछ भी" पंक्तियों की कम से कम 50% में मौजूद है। इस प्रकार, इसे प्रभावी ढंग से स्टॉपवर्ड के रूप में माना जाता है। बड़े डेटा सेट के लिए, यह सबसे वांछनीय व्यवहार है: प्राकृतिक भाषा क्वेरी को 1 जीबी तालिका से प्रत्येक दूसरी पंक्ति वापस नहीं करनी चाहिए। छोटे डेटा सेट के लिए, यह कम वांछनीय हो सकता है।

आपकी तालिका में दो पंक्तियों है ...

+0

मैं उस बिट को याद किया!हालांकि, जिस तालिका में मैं खोज रहा हूं, उसके पास केवल थोड़ी सी पंक्तियां हो सकती हैं (वर्तमान में केवल 1 है और साइट लाइव है) इसलिए मुझे मैचों को वापस करने की आवश्यकता है, भले ही यह हो (हालांकि इस मामले में) तालिका में हर पंक्ति! – Ken

संबंधित मुद्दे