Fulltext:让搜索更高效的利器(MySql使用FullText)

随着互联网的发展,数据呈指数级增长,我们急需高效的搜索算法,来找到我们所需的信息。其中一个重要的算法就是fulltext。在本文中,我们将从多个方面对fulltext进行详细的阐述。

一、fulltext是什么?

1、fulltext的定义

FULLTEXT()函数用于在MySQL数据库表的TEXT列中查找一个或多个单词的文本。该功能使MySQL可以使用自然的语言查询:这意味着用户可以键入针对表中数据的问题,就像在其他搜索引擎中一样。

2、fulltext的带来的优势

相比于普通字符串匹配,fulltext的优势主要在于:

  • 在一些大型的表中,效率更高
  • 搜索条件更灵活,可以匹配多个关键词
  • 可以忽略常见词,如“a”“and”“the”等,从而提高搜索的精确度

二、fulltext和数据库的集成

1、在MySQL中使用fulltext

CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    title VARCHAR(200),
    body TEXT,
    FULLTEXT (title,body)
);

2、在PostgreSQL中使用fulltext

CREATE INDEX idx_articles_fts ON articles USING gin(to_tsvector('english', body));

3、在MongoDB中使用fulltext

db.articles.createIndex({title:"text", body:"text"})

三、fulltext和搜索引擎的结合

1、接入Elasticsearch

PUT /articles
{
    "settings": {
        "index": {
            "analysis": {
                "analyzer": {
                    "my_analyzer": {
                        "type": "custom",
                        "tokenizer": "standard",
                        "filter": [
                            "lowercase",
                            "stemmer"
                        ]
                    }
                }
            }
        }
    },
    "mappings": {
        "properties": {
            "title": {
                "type": "text",
                "analyzer": "my_analyzer"
            },
            "body": {
                "type": "text",
                "analyzer": "my_analyzer"
            }
        }
    }
}

2、接入Solr


    
        
        
        
        
    
    
        
        
        
        
    

四、fulltext的优化和注意事项

1、优化

  • 查询优化:尽量使用基于满足查询条件的最小结果集来建立索引
  • 存储优化:fulltext索引占用的磁盘空间较大,需要在存储时进行优化
  • 分词优化:需要避免错误的词组合

2、注意事项

  • fulltext并不能解决所有的搜索问题,请根据实际场景进行使用
  • fulltext只能在某些具有该特性的数据库中使用
  • 需要进行不同数据库中fulltext的语法调整

本文简单介绍了fulltext在搜索方面的优势,并结合MySQL、PostgreSQL、MongoDB以及搜索引擎如Elasticsearch和Solr的使用进行阐述。在使用时需要注意优化和一些注意事项。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平