网站模板库
  • 首页
  • web前端工具
    • HTML/JS转换工具
    • JS/HTML格式化工具
    • 字母/英文大小写转换工具
    • robots.txt文件生成工具
    • Js压缩/格式化工具
    • Css在线压缩工具_代码格式化
  • 关于我们
    • 免责声明
    • 联系我们
    • 广告服务
    • 服务项目
    • 关于我们
    • 网站轮播
    • 公告
    • 成都优优科技专用
    • 按行业分类
  • web学院
    • 服务器教程
    • 学习资料
      • 基础书籍
      • 交互书籍
      • 入门教程
      • 特效分类
    • 案例分享
    • web资讯
  • 网页特效
    • 图片特效
    • 导航特效
    • 滑动按钮
    • 表单特效
    • 文字特效
    • 弹窗特效
    • 其他特效
  • 织梦模板
    • 科技/电子/数码/通信
    • 文化/艺术/广告/传媒
    • 装修/设计/家居/家具
    • 基建/施工/地产/物业
    • 餐饮/酒店/旅游/票务
    • 食品/果蔬/饮料/日用
    • 服饰/珠宝/礼品/玩具
    • 摄影/婚庆/家政/生活
    • 运动/健身/体育/器材
    • 学校/教育/培训/科研
    • 美容/保健/医院/医疗
    • 金融/财税/咨询/法律
    • 政府/组织/集团/协会
    • 汽车/物流/交通/搬运
    • 机械/设备/制造/仪器
    • 化工/环保/能源/材料
    • 农业/畜牧/养殖/宠物
    • 其他模版
    • IT/软件/信息/互联网
  • 手机模板
    • 手机APP模板
    • 微信小程序模板
    • wap
  • 网站模板
    • joomla模板
    • Drupal模板
    • z-blog模板
    • EyouCms模板
    • Bootstrap模板
    • 帝国cms模板
    • CmsEasy模板
    • MetInfo模板
    • 购物商城模板
      • Shopify主题
      • PrestaShop主题
    • 后台模板
    • 纯HTML模板
    • ecshop模板
    • phpwind模板
    • pbootcms模板
    • phpcms模板
    • wordpress模板
    • discuz模板
  • 教程
    • 织梦教程
    • Discuz教程
    • WordPress教程
    • Phpcms教程
    • Phpwind教程
    • ECShop教程
    • Joomla教程
    • Drupal教程
    • zblog教程
    • EyouCMS教程
    • 帝国cms教程
    • MetInfo教程
    • CmsEasy教程
登录
当前位置:网站模板库 > web学院 > 服务器教程 > 关于Solr 谁可以告诉我这个问题怎么解决
商业源码 服务器教程 2023-12-18 18:43:02

关于Solr 谁可以告诉我这个问题怎么解决

关于Solr 谁可以告诉我这个问题怎么解决,第1张

最近搭建一个全文检索平台。最初考虑只采用lucene,然后自己写索引构建程序、检索框架等,类似osc @红薯 的方案,以前也做过比较熟悉。但有两个问题,1比较复杂,工作量和维护量都比较大。2 检索会有一定的延时。

看了看Solr决定采用solr,可以节省很大一部分开发时间。但有几个问题想请教下 osc 里的全文检索高手,希望大家不吝赐教:

1第一种方案,solr配置数据库,自动处理建索引。这样会不会延时很大,无法做到实时检索?

2第二种方案,通过solrj客户端在应用端 处理建索引问题,比如在发布一篇文章的时候,通过http 提交到solr 服务端上同时建索引,这样能不能达到实时检索?而且同时这个时候 应用端也会通过 http 检索 solr, 建索引检索同时进行,这样访问量大的时候会不会导致 内存泄露、索引文件磁盘I/O负载不了的问题?

有经验的同学能不能讨论下那种方案较好点,对实时性要求高点。或者配置上怎么优化?

当然这个项目是企业内部应用,访问量不会太大,服务器资源有限,所以无法用到solr的分布式特性,比如索引复制、多核来解决这些问题。而且由于可能会部署在 windows下,排除了以前做过的sphinx、nlpbamboo 基于Postgresql数据库的方案。

Lucene是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎

Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Solr Get操作提出查找请求,并得到XML格式的返回结果;

Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。Lucene本质上是搜索库,不是独立的应用程序,而Solr是。Lucene专注于搜索底层的建设,而Solr专注于企业应用。Lucene不负责支撑搜索服务所必须的管理,而Solr负责。所以说,一句话概括Solr: Solr是Lucene面向企业搜索应用的扩展

修改主方法

public int saveContent(String enterpriseId, String enterpriseName, String lableType, String resouce, String pubDate,

String content) {

int state = 0;

LBHttpSolrServer server = SolrUtilgetSolrServer(apgetEnterprisenewSolrUrl());

SolrQuery query = new SolrQuery();

queryset("q", "enterpriseId:" + enterpriseId);

try {

QueryResponse qr = serverquery(query);

List<EnterpriseContentBean> contentList = qrgetBeans(EnterpriseContentBeanclass);

// 设置需要保存的文章信息

for (EnterpriseContentBean bean : contentList) {

beansetEnterpriseId(enterpriseId);

beansetEnterpriseName(enterpriseName);

List<String> contents = new ArrayList<String>();

contentsadd(content);

beansetContent(contents);

beansetPubDate(pubDate);

Systemoutprintln("pubDate======>" + pubDate);

List<String> lableTypes = ArraysasList(lableTypesplit(","));

beansetLableType(lableTypes);

beansetResource(resouce);

beansetIsVisited_s("1");

}

serveraddBeans(contentList);

servercommit();

} catch (SolrServerException e) {

state = 1;

Systemoutprintln("修改solr数据报错");

eprintStackTrace();

} catch (IOException e) {

state = 1;

Systemoutprintln("修改solr数据报错");

eprintStackTrace();

}

return state;

}

删除主方法

public int deletContent(String enterpriseId) {

LBHttpSolrServer server = SolrUtilgetSolrServer(apgetEnterprisenewSolrUrl());

int state = 0;

try {

serverdeleteById(enterpriseId);

servercommit();

} catch (SolrServerException e) {

state = 1;

Systemoutprintln("删除solr数据报错");

eprintStackTrace();

} catch (IOException e) {

state = 1;

Systemoutprintln("删除solr数据报错");

eprintStackTrace();

}

return state;

}

solr工具类

package comdinfobocutils;

import javaioIOException;

import javanetMalformedURLException;

import javautilArrayList;

import javautilArrays;

import javautilCollection;

import javautilList;

import orgapachesolrclientsolrjSolrQuery;

import orgapachesolrclientsolrjSolrServerException;

import orgapachesolrclientsolrjimplLBHttpSolrServer;

import orgapachesolrclientsolrjresponseQueryResponse;

import orgapachesolrcommonSolrDocumentList;

import orgapachesolrcommonSolrInputDocument;

import comdinfobocenterprisebeanEnterpriseContentBean;

import comdinfobocenterprisenewbeanSolrQueryResult;

/

与Solr服务器交互的工具类

@author qiuyj

/

public class SolrUtil {

/

获取与指定Solr地址的连接

@param solrUrl

@return

/

public static LBHttpSolrServer getSolrServer(String solrUrl){

final int ONE_HUNDRED_MS = 10000000;

if(solrUrl == null || ""equals(solrUrl)){

throw new RuntimeException("Solr url can not be empty!");

}

LBHttpSolrServer solrServer = null;

try {

solrServer = new LBHttpSolrServer(solrUrl);

solrServersetConnectionTimeout(ONE_HUNDRED_MS);

} catch (MalformedURLException e) {

eprintStackTrace();

} //SolrUtilgetSolrServer(solrUrl);

//solrServersetDefaultMaxConnectionsPerHost(100);

//solrServersetMaxTotalConnections(100);

return solrServer;

}

/

向指定的Solr地址添加一条数据

@param solrUrl

@param doc

@throws Exception

/

public static void add(String solrUrl, SolrInputDocument doc) throws Exception {

if(doc == null){

throw new RuntimeException("SolrInputDocument object can not be null!");

}

LBHttpSolrServer solr = getSolrServer(solrUrl);

solradd(doc);

solrcommit();

}

/

向指定的Solr地址用JavaBean添加一条数据

@param solrUrl

@param obj

@throws Exception

/

public static void add(String solrUrl, Object obj) throws Exception {

if(obj == null){

throw new RuntimeException("Object to be inserted can not be null!");

}

LBHttpSolrServer solr = getSolrServer(solrUrl);

solraddBean(obj);

solrcommit();

}

/

向指定Solr地址批量添加数据

@param solrUrl

@param docs

@throws Exception

/

@SuppressWarnings("unchecked")

public static void addAll(String solrUrl, Collection< extends Object> objs) throws Exception {

if(objs == null){

throw new RuntimeException("Object collection can not be null!");

}

if(objssize() == 0){

return;

}

LBHttpSolrServer solr = getSolrServer(solrUrl);

if(objsiterator()next() instanceof SolrInputDocument){

solradd((Collection<SolrInputDocument>)objs);

} else {

solraddBeans(objs);

}

solrcommit();

}

/

根据给定的id,从solr中删除对应信息

@param solrUrl

@param ids

/

public static void deleteByIds(String solrUrl, String ids) throws Exception {

if(ids == null || idslength == 0){

throw new RuntimeException("Ids can not be empty!");

}

LBHttpSolrServer solr = getSolrServer(solrUrl);

solrdeleteById(ArraysasList(ids));

solrcommit();

}

public static void deleteByIds(String solrUrl, Integer ids) throws Exception {

if(ids == null || idslength == 0){

throw new RuntimeException("Ids can not be empty!");

}

List<String> stringIdList = new ArrayList<>(idslength);

for(Integer id : ids){

stringIdListadd("" + id);

}

LBHttpSolrServer solr = getSolrServer(solrUrl);

solrdeleteById(stringIdList);

solrcommit();

}

/

删除指定Solr路径下符合指定查询条件的数据

@param solrUrl

@param condition

@throws Exception

/

public static void deleteByCondition(String solrUrl, String condition) throws Exception {

if(condition == null || ""equals(condition)){

throw new RuntimeException("Condition can not be empty!");

}

LBHttpSolrServer solr = getSolrServer(solrUrl);

solrdeleteByQuery(condition);

solrcommit();

}

/

删除指定Solr路径下的所有数据

@param solrUrl

@throws Exception

/

public static void deleteAll(String solrUrl) throws Exception {

deleteByCondition(solrUrl, ":");

}

/

根据 指定查询条件从Solr中查询数据,并以SolrDocument的List形式返回

@param solrUrl

@param query

@return

@throws Exception

/

public static SolrDocumentList queryAndGetSolrDocumentList(String solrUrl, SolrQuery query) throws Exception {

if(query == null){

throw new RuntimeException("SolrQuery object can not be null!");

}

LBHttpSolrServer solr = getSolrServer(solrUrl);

QueryResponse resp = solrquery(query);

return respgetResults();

}

/

根据 指定查询条件从Solr中查询数据,并以QueryResponse形式返回

@param solrUrl

@param query

@return

@throws Exception

/

public static QueryResponse queryAndGetSolrQueryResponse(String solrUrl, SolrQuery query) throws Exception {

if(query == null){

throw new RuntimeException("SolrQuery object can not be null!");

}

LBHttpSolrServer solr = getSolrServer(solrUrl);

QueryResponse resp = solrquery(query);

return resp;

}

/

根据 指定查询条件从Solr中查询数据,并以Java Bean的List形式返回

@param solrUrl

@param query

@param returnClass 返回的List集合的泛型

@return

@throws Exception

/

public static <T> List<T> queryAndGetBeanList(String solrUrl, SolrQuery query, Class<T> returnClass) throws Exception {

if(query == null){

throw new RuntimeException("SolrQuery object can not be null!");

}

if(returnClass == null){

throw new RuntimeException("Return class can not be null!");

}

LBHttpSolrServer solr = getSolrServer(solrUrl);

QueryResponse resp = solrquery(query);

return respgetBeans(returnClass);

}

/

根据 指定查询条件从Solr中查询数据,并以SolrQueryResult对象的形式返回,其中包含List对象和totalCount

@param solrUrl

@param query

@param returnClass 返回的List集合的泛型

@return

@throws Exception

/

public static <T> SolrQueryResult<T> queryAndGetSolrQueryResult(String solrUrl, SolrQuery query, Class<T> returnClass) throws Exception {

SolrQueryResult<T> result = new SolrQueryResult<T>();

if(query == null){

throw new RuntimeException("SolrQuery object can not be null!");

}

if(returnClass == null){

throw new RuntimeException("Return class can not be null!");

}

LBHttpSolrServer solr = getSolrServer(solrUrl);

solrsetConnectionTimeout(10000);

QueryResponse resp = solrquery(query);

List<T> resultList = respgetBeans(returnClass);

long totalCount = respgetResults()getNumFound();

resultsetResultList(resultList);

resultsetTotalCount(totalCount);

return result;

}

/

根据 指定查询条件从Solr中查询数据,并以SolrQueryResult对象的形式返回,其中包含List对象和totalCount

@param solrUrl

@param query

@param returnClass 返回的List集合的泛型

@return

@throws Exception

/

public static <T> SolrQueryResult<T> queryAndGetSolrQueryResult(LBHttpSolrServer solr, SolrQuery query, Class<T> returnClass) throws Exception {

SolrQueryResult<T> result = new SolrQueryResult<T>();

if(query == null){

throw new RuntimeException("SolrQuery object can not be null!");

}

if(returnClass == null){

throw new RuntimeException("Return class can not be null!");

}

QueryResponse resp = solrquery(query);

List<T> resultList = respgetBeans(returnClass);

long totalCount = respgetResults()getNumFound();

resultsetResultList(resultList);

resultsetTotalCount(totalCount);

return result;

}

/

用以过滤一些影响Solr查询的特殊字符,如左右括号、星号等

@param str

@return

/

public static String filterSpecialCharacters(String str){

if(str == null){

return str;

}

str = strreplace("(", "\\(");

str = strreplace(")", "\\)");

str = strreplace("", "\\");

return str;

}

public static void updateSolrById(LBHttpSolrServer server){

SolrQuery query = new SolrQuery();

String id="5d495a00a5c8118c03ef0bec0111dd8d";

int state=0;

String name="新疆金风科技股份有限公司";

queryset("q", "enterpriseId:"+id);

try {

QueryResponse qr = serverquery(query);

List<EnterpriseContentBean> contentList = qrgetBeans(EnterpriseContentBeanclass);

//设置需要保存的文章信息

for(EnterpriseContentBean bean:contentList){

// beansetEnterpriseId(enterpriseId);

beansetEnterpriseName(name);

beansetResource("东方财富网港股频道");

}

serveraddBeans(contentList);

servercommit();

} catch (SolrServerException e) {

state = 1;

eprintStackTrace();

} catch (IOException e) {

state = 1;

eprintStackTrace();

}

}

public static void main(String[] args) {

try {

LBHttpSolrServerenterpriseServer=new LBHttpSolrServer("http://115182226165:8008/solr/enterprisenew");

enterpriseServersetConnectionTimeout(10000000);

updateSolrById(enterpriseServer);

Systemoutprintln("over");

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

}

数据 索引 全文 并以 引擎
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 关于Solr 谁可以告诉我这个问题怎么解决

商业源码 钻石

分享到:
上一篇
雷电模拟器怎么用ssr
下一篇
魔兽世界icecrown服情况

相关推荐

联想T168 RAID1硬盘损坏,如何更换新的硬盘?

联想T168 RAID1硬盘损坏,如何更换新的硬盘?

tcp fih属于典型的端口扫描类型

tcp fih属于典型的端口扫描类型

IPFS有什么优势?

IPFS有什么优势?

如何将Windows服务器变成iSCSI存储服务器

如何将Windows服务器变成iSCSI存储服务器

0条评论

发表评论 取消回复

要发表评论,您必须先登录。

提供最优质的资源集合

立即查看 了解详情
网站模板库

主题/付费下载/查看/余额管理/自定义积分,集成支付,卡密,推广奖励等。

本站导航
  • 链接标题
友情链接
  • 链接标题
快速搜索
本站由钛宇宙强力驱动
友情链接:
    商业源码网蜀ICP备2023005044号
    网站模板库
    • 登录
    • 注册
    网站模板库
    • 首页
    • web前端工具►
      • HTML/JS转换工具
      • JS/HTML格式化工具
      • 字母/英文大小写转换工具
      • robots.txt文件生成工具
      • Js压缩/格式化工具
      • Css在线压缩工具_代码格式化
    • 关于我们►
      • 免责声明
      • 联系我们
      • 广告服务
      • 服务项目
      • 关于我们
      • 网站轮播
      • 公告
      • 成都优优科技专用
      • 按行业分类
    • web学院►
      • 服务器教程
      • 学习资料►
        • 基础书籍
        • 交互书籍
        • 入门教程
        • 特效分类
      • 案例分享
      • web资讯
    • 网页特效►
      • 图片特效
      • 导航特效
      • 滑动按钮
      • 表单特效
      • 文字特效
      • 弹窗特效
      • 其他特效
    • 织梦模板►
      • 科技/电子/数码/通信
      • 文化/艺术/广告/传媒
      • 装修/设计/家居/家具
      • 基建/施工/地产/物业
      • 餐饮/酒店/旅游/票务
      • 食品/果蔬/饮料/日用
      • 服饰/珠宝/礼品/玩具
      • 摄影/婚庆/家政/生活
      • 运动/健身/体育/器材
      • 学校/教育/培训/科研
      • 美容/保健/医院/医疗
      • 金融/财税/咨询/法律
      • 政府/组织/集团/协会
      • 汽车/物流/交通/搬运
      • 机械/设备/制造/仪器
      • 化工/环保/能源/材料
      • 农业/畜牧/养殖/宠物
      • 其他模版
      • IT/软件/信息/互联网
    • 手机模板►
      • 手机APP模板
      • 微信小程序模板
      • wap
    • 网站模板►
      • joomla模板
      • Drupal模板
      • z-blog模板
      • EyouCms模板
      • Bootstrap模板
      • 帝国cms模板
      • CmsEasy模板
      • MetInfo模板
      • 购物商城模板►
        • Shopify主题
        • PrestaShop主题
      • 后台模板
      • 纯HTML模板
      • ecshop模板
      • phpwind模板
      • pbootcms模板
      • phpcms模板
      • wordpress模板
      • discuz模板
    • 教程►
      • 织梦教程
      • Discuz教程
      • WordPress教程
      • Phpcms教程
      • Phpwind教程
      • ECShop教程
      • Joomla教程
      • Drupal教程
      • zblog教程
      • EyouCMS教程
      • 帝国cms教程
      • MetInfo教程
      • CmsEasy教程

      弹窗标题

      这是一条网站公告,可在后台开启或关闭,可自定义背景颜色,标题,内容,用户首次打开关闭后不再重复弹出,此处可使用html标签...