[全文索引] 那些比较'轻'的全文索引工具

/ 后端 / 没有评论 / 182浏览

1.MySQL(5.7以上版本)提供的ngram功能

(1)创建字段设置为全文索引类型并且解析器为ngram

CREATE TABLE `t_ngram` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `name` (`name`) /*!50100 WITH PARSER `ngram` */ 
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

(2)设置初始值进行测试

INSERT INTO `test`.`t_ngram` (`id`, `name`) VALUES (1, '123我爱中国');
INSERT INTO `test`.`t_ngram` (`id`, `name`) VALUES (2, '我是1中国人你呢'); 

(3)进行全文索引查询

SELECT 
    id, name
FROM
    t_ngram
WHERE
    MATCH (name) AGAINST ('123中国' ); 

2.使用redis模块RediSearch(如果是阿里云redis企业版则是TairSearch)

注意: 阿里云的命令和RediSearch有区别

TairSearch客户端试用:

 @Test
    public void t1() throws InterruptedException {
        try (Jedis jedis = jedisPool.getResource()) {
            jedis.select(16);
            TairSearch tairSearch = new TairSearch(jedis);
            
            // String tftcreateindex = tairSearch.tftcreateindex("test-index", "{\"mappings\":{\"properties\":{\"product_group\":{\"type\":\"text\",\"analyzer\":\"chinese\"}}}}");
            //System.out.println(tftcreateindex);
            // String tftgetindexmappings = tairSearch.tftgetindexmappings("test-index");
            // System.out.println(tftgetindexmappings);

            //Map<String, String> docs = new HashMap<>();
            //docs.put("{\"product_group\":\"王芳老师讲经典小古文王芳老师讲《琵琶行》小课包\"}","1");
            //docs.put("{\"product_group\":\"王芳老师讲神奇的世界地图【地理初级课】经典小古文小课包\"}","2");

            //String tftmadddoc = tairSearch.tftmadddoc("test-index", docs);
            //System.out.println(tftmadddoc);

            //String tftsearch = tairSearch.tftsearch("test-index", "{\"query\":{\"match_all\":{\"boost\":1.2}}}");
            //System.out.println(tftsearch);

            String tftsearch = tairSearch.tftsearch("test-index", "{\"query\":{\"match\":{\"product_group\":\"琵琶行初级\"}}}");
            System.out.println(tftsearch);
        }