例如:搜索一堆文件中含有java单词的文件-->Lucene·可以解决
数据库搜索
数据分类
非结构化数据查询方式
弊端:相当慢
如何实现全文索引
全文检索的运用场景
索引过程
搜索过程
代码开发
搭建环境:
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的,即先对查询语句进行分析
*:* 代表查询所有
指定多个默认域查询
等价于: