索引创建和搜索过程
1.创建索引
举例子:
文档一:solr是基于lucene开发的企业级搜索引擎技术
文档二:solr是一个独立的企业级搜索应用服务器,solr是一个高性能,基于lucene的全文搜索服务器
首先经过分词器分词,solr会为分词后的结果(词典)创建索引,然后将索引和文档id列表对应起来,如下图所示:
比如:solr在文档1和文档2中都有出现,所以对应的文档id列表中既包含文档1的id也包含文档2的id,文档id列表对应到具体的文档,并体现该词典在该文档中出现的频次,频次越多说明权重越大,权重越大搜索的结果就会排在前面。
solr内部会对分词的结果做如下处理:
1.去除停词和标点符号,例如英文的this,that等, 中文的“的”,“一”等没有特殊含义的词
2.会将所有的大写英文字母转换成小写,方便统一创建索引和搜索索引
3.将复数形式转为单数形式,比如students转为student,也是方便统一创建索引和搜索索引
2.索引搜索过程
知道了创建索引的过程,那么根据索引进行搜索就变得简单了。
1.用户输入搜索条件
2.对搜索条件进行分词处理
3.根据分词的结果查找索引
4.根据索引找到文档id列表
5.根据文档id列表找到具体的文档,根据出现的频次等计算权重,最后将文档列表按照权重排序返回
使用solrj管理索引库
使用solrj可以实现索引库的增删改查操作。
3.1 添加文档
第一步:把solrj的jar包添加到工程中。
第二步:创建一个solrserver,使用httpsolrserver创建对象。
第三步:创建一个文档对象solrinputdocument对象。
第四步:向文档中添加域。必须有id域,域的名称必须在schema.xml中定义。
第五步:把文档添加到索引库中。
第六步:提交。
3.2 删除文档
3.2.1 根据id删除
第一步:创建一个solrserver对象。
第二步:调用solrserver对象的根据id删除的方法。
第三步:提交。
3.2.2 根据查询删除
3.3 查询索引库
第一步:创建一个solrserver对象
第二步:创建一个solrquery对象。
3 向solrquery中添加查询条件、过滤条件。。。
第四步:执行查询。得到一个response对象。
5 取查询结果。
第六步:遍历结果并打印。
3.3.1 简单查询
3.3.2 带高亮显示
@test
public void searchdocumet() throws exception {
// 创建一个solrserver对象
solrserver solrserver = new httpsolrserver(“http://101.132.69.111:8080/solr/collection1”);
// 创建一个solrquery对象
solrquery query = new solrquery();
// 设置查询条件、过滤条件、分页条件、排序条件、高亮
// query.set(“q”, “*:*”);
query.setquery(“手机”);
// 分页条件
query.setstart(0);
query.setrows(30);
// 设置默认搜索域
query.set(“df”, “item_keywords”);
// 设置高亮
query.sethighlight(true);
// 高亮显示的域
query.addhighlightfield(“item_title”);
query.sethighlightsimplepre(“《div》”);
query.sethighlightsimplepost(“《/div》”);
// 执行查询,得到一个response对象
queryresponse response = solrserver.query(query);
// 取查询结果
solrdocumentlist solrdocumentlist = response.getresults();
// 取查询结果总记录数
system.out.println(“查询结果总记录数:” + solrdocumentlist.getnumfound());
for (solrdocument solrdocument : solrdocumentlist) {
system.out.println(solrdocument.get(“id”));
// 取高亮显示
map《string, map《string, list《string》》》 highlighting = response.gethighlighting();
list《string》 list = highlighting.get(solrdocument.get(“id”)).get(“item_title”);
string itemtitle = “”;
if (list != null && list.size() 》 0) {
itemtitle = list.get(0);
} else {
itemtitle = (string) solrdocument.get(“item_title”);
}
system.out.println(itemtitle);
system.out.println(solrdocument.get(“item_sell_point”));
system.out.println(solrdocument.get(“item_price”));
system.out.println(solrdocument.get(“item_image”));
system.out.println(solrdocument.get(“item_category_name”));
system.out.println(“=============================================”);
}
}
4. solr服务器中的后台数据处理
这个其实是通过图形界面操作,只需手动填写查询条件,不需要进行代码处理。但是实际项目开发中,还是需要进行代码编写的。
6
4.1 solr的基础语法
q 查询的关键字,此参数最为重要,例如,q=id:1,默认为q=*:*,
fq (filter query)过虑查询,提供一个可选的筛选器查询。
返回在q查询符合结果中同时符合的fq条件的查询结果
sort 排序方式,例如id desc 表示按照 “id” 降序
start 返回结果的第几条记录开始,一般分页用,默认0开始
rows 指定返回结果最多有多少条记录,默认值为 10,配合start实现分页
fl 指定返回哪些字段,用逗号或空格分隔,注意:字段区分大小写,例如,fl= id,title,sort
df 默认的查询字段,一般默认指定
wt (writer type)指定输出格式,有 xml, json, php等
indent 返回的结果是否缩进,默认关闭
hl 高亮
hl.fl 设定高亮显示的字段
hl.requirefieldmatch 如果置为true,除非用hl.fl指定了该字段,查询结果才会被高亮。它的默认值是false。
hl.usephrasehighlighter 如果一个查询中含有短语(引号框起来的)那么会保证一定要完全匹配短语的才会被高亮。
hl.highlightmultiterm如果使用通配符和模糊搜索,那么会确保与通配符匹配的term会高亮。默认为false,同时hl.usephrasehighlighter要为true。
hl.fragsize 返回的最大字符数。默认是100.如果为0,那么该字段不会被fragmented且整个字段的值会被返回。
如何让云企业网支持VPN路由
久岩传感 GEO EP振弦式土压力计传感器的安装及计算公式
蓝牙技术联盟访谈-芯科科技前瞻2023年蓝牙技术关键发展趋势
苹果13预计上市时间价格多少
如何使PLC编程更容易呢?
Solr如何管理索引库
串激电机转速一般多少_串激电机怎么调转速
三星在CES 2024推出全球首款透明MicroLED显示屏
AI生态将成为华为制胜法宝,AI将驱动新一代人机交互变革
小马智行与博世合作建立自动驾驶领域的车队管理解决方案
南卡N2真无线蓝牙耳机怎么样
最小系统电路图
深入探索Linux中的C语言
一种LED应急灯电路分享
超声波换能报警器
AEG高端家电,让品质成就美好生活
光模块的选择小技巧与使用小常识分享
便携式彩超机有什么功能
关于无人机反制枪的工作原理的简单介绍
华为实验|MPLS VPN基础实验