Lucene&solr:全文检索学习

例如:搜索一堆文件中含有java单词的文件-->Lucene·可以解决

数据库搜索

数据分类

非结构化数据查询方式

弊端:相当慢

如何实现全文索引

扫描二维码关注公众号,回复: 4731187 查看本文章

全文检索的运用场景

索引过程

搜索过程

 

代码开发

搭建环境:

1:导入相应的包

build path

案例--创建索引

 

 

 

查询索引

执行查询

渲染结果

案例--查询索引

 

 

 

 

第三方中文分析器

IK

第一步:导包

第二步:添加核心配置文件到src

// 查看标准分析器的分词效果
    @Test
    public void testTokenStream() throws Exception {
        // 创建一个标准分析器对象
//        Analyzer analyzer = new StandardAnalyzer();
//        Analyzer analyzer = new CJKAnalyzer();
//        Analyzer analyzer = new SmartChineseAnalyzer();
        Analyzer analyzer = new IKAnalyzer();
        // 获得tokenStream对象
        // 第一个参数:域名,可以随便给一个
        // 第二个参数:要分析的文本内容
//        TokenStream tokenStream = analyzer.tokenStream("test",
//                "The Spring Framework provides a comprehensive programming and configuration model.");
        TokenStream tokenStream = analyzer.tokenStream("test",
                "高富帅可以用二维表结构来逻辑表达实现的数据");
        // 添加一个引用,可以获得每个关键词
        CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
        // 添加一个偏移量的引用,记录了关键词的开始位置以及结束位置
        OffsetAttribute offsetAttribute = tokenStream.addAttribute(OffsetAttribute.class);
        // 将指针调整到列表的头部
        tokenStream.reset();
        // 遍历关键词列表,通过incrementToken方法判断列表是否结束
        while (tokenStream.incrementToken()) {
            // 关键词的起始位置
            System.out.println("start->" + offsetAttribute.startOffset());
            // 取关键词
            System.out.println(charTermAttribute);
            // 结束位置
            System.out.println("end->" + offsetAttribute.endOffset());
        }
        tokenStream.close();
    }

可以创建ext.dic文件来添词汇也可在stopword.doc文件里面停用

注意:搜索时使用的分析器要和索引使用的分析器一致

 

 

 

索引维护:

删除

 

修改

查询

前面例子的查询是一个精准查询

query的子类查询:使用对象类查

1:查询所有

2:根据数值范围查

3:组合查询  同时查名字**与内容**

must:必须

should:可有可无

 

解析查询 QueryParse:使用的语法查

参数2的作用:如以下就会查询名字中有 java 或者apache的,即先对查询语句进行分析

*:*  代表查询所有

指定多个默认域查询

等价于:

 

猜你喜欢

转载自blog.csdn.net/qq_41956566/article/details/85342361
今日推荐