Java集成Trie树

实现方案:

        在spring容器初始化的时候 将数据库中数据查询出来 初始化到trie树结构中,并初始化创建trie对象,在service中编写方法,当页面输入单词时,发送请求到后台 后台接收之后,将词添加至树中,并直接按照输入的词 作为前缀进行搜索然后返回列表即可

1、导入依赖:

<dependency>
    <groupId>com.github.takawitter</groupId>
    <artifactId>trie4j</artifactId>
    <version>0.9.8</version>
</dependency>

2、创建配置类:

@Configuration
public class ApAssociateWordsInitializingBean implements InitializingBean {
    @Autowired
    private ApAssociateWordsService apAssociateWordsService;

    @Bean
    public PatriciaTrie patriciaTrie(){
        PatriciaTrie pat = new PatriciaTrie();
        return pat;
    }

    @Autowired
    private PatriciaTrie pat;

    @Override
    public void afterPropertiesSet() throws Exception {
        List<ApAssociateWords> associateWordsList = apAssociateWordsService.list();
        for (ApAssociateWords apAssociateWords : associateWordsList) {
            pat.insert(apAssociateWords.getAssociateWords());
        }
    }
}

3、ServiceImpl实现类(controller 和service接口 略,自己定义就行):

@Autowired
private PatriciaTrie pat; 

@Override
    public List<String> searchByTrie(SearchDto dto) {
        if (dto == null) {
            throw new LeadNewsException(HttpCodeEnum.PARAM_REQUIRE.getCode(), HttpCodeEnum.PARAM_REQUIRE.getMessage());
        }

        Integer pageNum = dto.getPageNum();
        Integer pageSize = dto.getPageSize();
        if (pageNum == null || pageNum <= 0){
            pageNum = 1;
        }

        if (pageSize == null || pageSize <= 0){
            pageSize = 10;
        }
        String searchWords = dto.getSearchWords();
        List<String> list = new ArrayList<>();

        if (StringUtils.isNotEmpty(searchWords)) {

            //前缀匹配
            list = (List<String>)pat.predictiveSearch(searchWords);
            if (list.size()>10){
                return list.subList(0,10);
            }
            if (!pat.contains(searchWords)) {
                pat.insert(searchWords);
            }
        }
        return list;
    }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值