博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
constellio——基于solr的开源搜索引擎系统源码研究(二)
阅读量:6942 次
发布时间:2019-06-27

本文共 8873 字,大约阅读时间需要 29 分钟。

因为constellio系统的类比较多,先从搜索引擎最本质的功能模块索引与检索入手,看constellio系统实现索引与检索功能的源码

首先是获取solr上下文,下面是SolrCoreContext.java源码

/** * Constellio, Open Source Enterprise Search * Copyright (C) 2010 DocuLibre inc. * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA  02110-1301  USA */package com.doculibre.constellio.solr.context;import java.io.File;import java.io.IOException;import java.net.MalformedURLException;import java.util.HashMap;import java.util.Map;import javax.xml.parsers.ParserConfigurationException;import org.apache.solr.client.solrj.SolrServer;import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;import org.apache.solr.core.CoreContainer;import org.apache.solr.core.SolrCore;import org.xml.sax.SAXException;import com.doculibre.constellio.entities.RecordCollection;import com.doculibre.constellio.opensearch.OpenSearchSolrServer;import com.doculibre.constellio.services.RecordCollectionServices;import com.doculibre.constellio.utils.ClasspathUtils;import com.doculibre.constellio.utils.ConstellioSpringUtils;public class SolrCoreContext {        private static File solrCoresRootDir;    private static CoreContainer cores = new CoreContainer();        public static final String DEFAULT_COLLECTION_NAME = "constellio_default";        private static Map
coreServers = new HashMap
(); public static synchronized void init() { if (solrCoresRootDir == null) { solrCoresRootDir = ClasspathUtils.getCollectionsRootDir(); } init(solrCoresRootDir); } public static synchronized void init(File solrCoresRootDir) { SolrCoreContext.solrCoresRootDir = solrCoresRootDir; try { File solrXml = new File(solrCoresRootDir, "solr.xml"); cores.load(solrCoresRootDir.getPath(), solrXml); for (String coreName : cores.getCoreNames()) { // Default setEmbeddedSolrServer(coreName); } } catch (ParserConfigurationException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } catch (SAXException e) { throw new RuntimeException(e); } } public static synchronized void shutdown() { if (cores != null) { cores.shutdown(); } } public static synchronized void clear() { solrCoresRootDir = null; cores = new CoreContainer(); coreServers = new HashMap
(); } public static File getSolrCoresRootDir() { return solrCoresRootDir; } public static File getSolrCoreRootDir(String coreName) { String coreDirName; if (coreName != null) { coreDirName = coreName; } else { coreDirName = DEFAULT_COLLECTION_NAME; } return new File(getSolrCoresRootDir(), coreDirName); } public static File getSolrCoreIndexDir(String coreName) { File solrCoreRootDir = getSolrCoreRootDir(coreName); return new File(solrCoreRootDir, "data" + File.separator + "index"); } public static CoreContainer getCores() { return cores; } public static SolrServer getSolrServer(String coreName) { RecordCollectionServices collectionServices = ConstellioSpringUtils.getRecordCollectionServices(); RecordCollection collection = collectionServices.get(coreName); if (collection != null && collection.isOpenSearch()) { return new OpenSearchSolrServer(); } else { return coreServers.get(coreName); } } //Pour tests sans collection public static SolrServer getSolrServerUtil(String coreName) { return coreServers.get(coreName); } public static void registerSolrServer(String coreName, SolrServer solrServer) { coreServers.put(coreName, solrServer); } public static void setEmbeddedSolrServer(String coreName) { registerSolrServer(coreName, new EmbeddedSolrServer(cores, coreName)); } public static void setHttpSolrServer(String coreName, String url) { try { registerSolrServer(coreName, new CommonsHttpSolrServer(url)); } catch (MalformedURLException e) { throw new RuntimeException(e); } } public static void removeCore(String coreName) { SolrCore core = cores.getCore(coreName); if (core != null) { core.closeSearcher(); core.close(); } cores.remove(coreName); coreServers.remove(coreName); } }

 下面是类路径工具类ClasspathUtils.java 

/** * Constellio, Open Source Enterprise Search * Copyright (C) 2010 DocuLibre inc. * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA  02110-1301  USA */package com.doculibre.constellio.utils;import java.io.File;import java.net.URISyntaxException;import java.net.URL;import com.doculibre.constellio.entities.RecordCollection;public class ClasspathUtils {        public static File getClassesDir() {        URL classesOrBinDirURL = ClasspathUtils.class.getClassLoader().getResource("");        File classesOrBinDir;        try {            classesOrBinDir = new File(classesOrBinDirURL.toURI());        } catch (URISyntaxException e) {            throw new RuntimeException(e);        }        return classesOrBinDir;    }        public static File getWebinfDir() {        File webinfDir;        File classesOrBinDir = getClassesDir();        if (classesOrBinDir.getName().equals("bin")) {            File projectDir = classesOrBinDir.getParentFile();            File webContentDir = new File(projectDir, "WebContent");            webinfDir = new File(webContentDir, "WEB-INF");        } else {            webinfDir = classesOrBinDir.getParentFile();        }        return webinfDir;    }        /**     * For a web application, it's the web-inf dir. For tests, it's a temporary folder.     * We don't want unit test to modify contellio project files     */    public static File getWorkDir() {        File workDir;        File classesOrBinDir = getClassesDir();        if (classesOrBinDir.getName().equals("bin")) {            File webInfDir = getWebinfDir();            workDir = new File(classesOrBinDir, "temp");            if (!workDir.exists()) {                workDir.mkdir();            }                //default Solr core            File constellioDir = new File(workDir, "constellio");            if (!constellioDir.exists()) {                FileUtils.copyDirectory(new File(webInfDir, "constellio"), constellioDir);            }            workDir.deleteOnExit();        } else {            workDir = getWebinfDir();        }        return workDir;    }        public static File getCollectionsRootDir() {        File webinfDir = getWorkDir();        File constellioDir = new File(webinfDir, "constellio");        File collectionsDir = new File(constellioDir, "collections");        return collectionsDir;    }        public static File getCollectionRootDir(RecordCollection collection) {        File collectionsDir = getCollectionsRootDir();        File collectionDir = new File(collectionsDir, collection.getName());        return collectionDir;    }        public static File getSynonymsFile(RecordCollection collection) {        File collectionDir = getCollectionRootDir(collection);        File synonymsFile = new File(collectionDir, "conf" + File.separator + "synonyms.txt");        return synonymsFile;    }        public static void main(String[] args) {        System.out.println(getClassesDir());    }}

转载地址:http://sennl.baihongyu.com/

你可能感兴趣的文章
SQLite操作
查看>>
奔向新纪元,Vista安装经历
查看>>
应用强制访问控制管理网络服务
查看>>
Mellanox发布升级版RoCE软件 简化以太网RDMA部署
查看>>
大数据产业“跑”出“长春速度”
查看>>
我的友情链接
查看>>
mysql把一个表某个字段的内容复制到另一张表的某个字段的SQL语句写法
查看>>
我的友情链接
查看>>
安卓constraintLayout中app:srcCompat设置的图片显示不出来
查看>>
交互式自动化脚本模板
查看>>
Docker Registry v2 + Token Auth Server (Registry v2 认证)实例。
查看>>
怎么复制磁盘里的数据?
查看>>
用户层修改peb实现隐藏一些东西
查看>>
关于Linux的内存(free -m)
查看>>
tomcat9启动后控制台输出乱码问题
查看>>
cssText文本格式化
查看>>
JS数组追加数组采用push.apply的坑
查看>>
如何避免adtbundle新建项目总是产生一个appcompat_v7和fragment_main.xml
查看>>
如何将iOS应用发布到App Store详解
查看>>
POJ 1488
查看>>