Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6179555
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 24, 20262026-05-24T00:41:18+00:00 2026-05-24T00:41:18+00:00

I want to write a tag based search engine in MySQL, but I don’t

  • 0

I want to write a tag based search engine in MySQL, but I don’t really know how to get to a pleasant result.

I used LIKE, but as I stored over 18k keywords in the database, it’s pretty slow.

What I got is a table like this:

id(int, primary key) article_cloud(text) keyword(varchar(40), FULLTEXT INDEX)

So I store one keyword per row and save all the refering article numbers in article_cloud.

I tried the MATCH() AGAINST() stuff, which works fine as long as the user types in the whole keyword. But I also want a suggest search, so that there are relevant articles popping up, while the user is typing. So I still need a similar statement to LIKE, but faster. And I have no idea what I could do.

Maybe this is the wrong concept of tag based searching. If you know a better one, please let me know. I’m fighting with this for days and can’t figure out a satisfying solution. Thanks for reading 🙂

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-24T00:41:19+00:00Added an answer on May 24, 2026 at 12:41 am

    MATCH() AGAINST() / FULLTEXT searching is a quick fix to a problem – but your schema makes no sense at all – surely there are multiple keywords in each article? And using a fulltext index on a column which only contains a single word is rather dumb.

    and save all the refering article numbers in article_cloud

    No! storing multiple values in a single column is VERY bad practice. When those values are keys to another table, it’s a mortal sin!

    It looks like you’ve got a long journey ahead of you to create something which will work efficiently; the quickest route to the goal is probably to use Google or Yahoo’s indexing services on your own data. But if you want to fix it yourself….

    See this answer on creating a search engine – the keywords should be in a separate table with a N:1 relationship to your articles, primary key on keyword and article id, e.g.

    CREATE TABLE article (
        id INTEGER NOT NULL autoincrement,
        modified TIMESTAMP,
        content TEXT
        ...
        PRIMARY KEY (id)
    );
    
    CREATE TABLE keyword (
        word VARCHAR(20),
        article_id INTEGER, /* references article.id
        relevance FLOAT DEFAULT 0.5, /* allow users to record relevance of keyword to article*/
        PRIMARY KEY (word, article_id)
    );
    
    CREATE TEMPORARY TABLE search (
        word VARCHAR(20),
        PRIMARY KEY (word)
    );
    

    Then split the words entered by the user, convert them to a consistent case (same as used for populating the keyword table) and populate the search table, then find matches using….

    SELECT article.id, SUM(keyword.relevance)
    FROM article, keyword, search
    WHERE article.id=keyword.article_id
    AND keyword.word=search.word
    GROUP BY article_id
    ORDER BY SUM(keyword.relevance) DESC
    LIMIT 0,3
    

    It’ll be a lot more efficient if you can maintain a list of words or rules about words NOT to use as keywords (e.g. ignore any words of 3 chars or less in mixed or lower case will omit stuff like ‘a’, ‘to’, ‘was’, ‘and’, ‘He’…).

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I want to write a Swing application in Griffon but I am not sure
I want to write a function in Python that returns different fixed values based
I want to write a real-time analysis tool for wireless traffic. Does anyone know
I want to write something that acts just like confirm() in javascript, but I
I want to write a command that specifies the word under the cursor in
I want to write a little DBQuery function in perl so I can have
I want to write a function that takes an array of letters as an
I want to write a word addin that does some computations and updates some
I want to write some JavaScript that will change the onmousedown of a div
I want to write a raw byte/byte stream to a position in a file.

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.