知识点
相关文章
更多最近更新
更多Apache Solrj EmbeddedSolrServer使用
2019-03-27 01:09|来源: 网路
Solr的配置网上讲的很多,但是实施总是遇到困难,现总结如下:
1. 从官网下载solr core的源码包,将solrwar包放到tomcat的webapps文件夹下,其它web容器亦然.
运行tomcat ,解压出来solr的文件夹.
2. Single core配置:以solr自带例子做讲解
2.1. 新建solrhome目录:d:/test/solrcore/singlecore ,从solr源码的example包下复制solr包
2.2. 在tomcat 下的 webappss的solr包 WEB-INF目录下修改web.xml的
<env-entry-name>solr/home</env-entry-name>
<env-entry-value> D:/test/solrcore/singlecore</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
2.3. 修改solrhome目录下的solr下的conf的solrconfig.xml文件
<dataDir>D:/test/solrcore/data/singlecore</dataDir>
此目录放置的是solr的data索引文件
2.4. 启动solr控制台,即可
3. multicore 配置:以solr core源码的multicore为例
3.1. 新建solrhome目录:d:/test/solrcore/multicore从solr源码的example下复制multicore目录到在solrhome下
3.2. 在tomcat 下的 webappss的solr包 WEB-INF目录下修改web.xml的
<env-entry-name>solr/home</env-entry-name>
<env-entry-value> D:/test/solrcore/multicore</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
3.2. 修改solrhome目录下的solr下的conf的solrconfig.xml文件
<dataDir>D:/test/solrcore/data/multicore</dataDir>
3.3. 将core0和core1的索引文件放到 D:/test/solrcore/data/multicore目录下
3.4. 启动solr控制台,可以看到二个core,安装完成
4. EmbeddedSolrServer使用
4.1.singleCore使用:
package com.taobao.terminator.allen.SolrjTest;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.core.CoreContainer;
import org.junit.Test;
public class EmbedSolrServerSingleCoreTest {
private static CoreContainer.Initializer initializer = null;
private static CoreContainer coreContainer = null;
private static EmbeddedSolrServer server = null;
static {
try {
System.setProperty("solr.solr.home", "D://test//solrcore//core0");
initializer = new CoreContainer.Initializer();
coreContainer = initializer.initialize();
server = new EmbeddedSolrServer(coreContainer, "");
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void query() throws Exception {
try {
SolrQuery q = new SolrQuery();
q.setQuery("*:*");
q.setStart(0);
q.setRows(20);
SolrDocumentList list = server.query(q).getResults();
System.out.println(list.getNumFound());
} catch (Exception e) {
e.printStackTrace();
} finally {
coreContainer.shutdown();
}
}
@Test
public void deleteAllDoc() throws Exception {
try {
server.deleteByQuery("*:*");
server.commit();
query();
} catch (Exception e) {
e.printStackTrace();
} finally {
coreContainer.shutdown();
}
}
}
4.2.multiCore使用:
package com.taobao.terminator.allen.SolrjTest;
import java.io.File;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.CoreContainer.Initializer;
public class EmbedSolrServerMultiCoreTest {
private static CoreContainer.Initializer initializer = null;
private static CoreContainer coreContainer = null;
private static EmbeddedSolrServer server = null;
static {
try {
System.setProperty("solr.solr.home", "D://test//solrcore//core1");
initializer = new CoreContainer.Initializer();
coreContainer = initializer.initialize();
server = new EmbeddedSolrServer(coreContainer, "");
} catch (Exception e) {
e.printStackTrace();
}
}
public void query() throws Exception {
try {
File f = new File( "D:/test/solrcore/multicore", "solr.xml" );
coreContainer = new Initializer().initialize();
coreContainer.load("D:/test/multicore", f);
coreContainer.setPersistent(true);
server = new EmbeddedSolrServer(coreContainer, "core1");
SolrQuery q = new SolrQuery();
q.setQuery("*:*");
System.out.println(server.query(q).getResults().getNumFound());
} catch (Exception e) {
e.printStackTrace();
} finally {
coreContainer.shutdown();
}
}
}
(来源:在http://blog.csdn.net/flyingpig4/article/details/6366414基础上美化阅读)
转自:http://www.cnblogs.com/ibook360/archive/2011/11/29/2267451
相关问答
更多-
负增强SolrJ bq(Negative Boost SolrJ bq)[2022-06-06]
查询如下: bq=(-id:abc123)^3 使用id = abc123来提升除doc之外的所有内容。 您可以尝试使用以下查询来降低该文档的分数: bq=(id:abc123)^0.3 在项目中,我正在努力将其绑定,但最终我在索引编制期间使用了提升(我正在基于文档“类”执行此操作)。 这个解决方案对我很有用。 Query like: bq=(-id:abc123)^3 Boosts everything other than doc with id=abc123. You can try to re ... -
solrj错误:数组越界(solrj error: array out of bounds)[2022-11-27]
原因是您在程序执行开始时没有提供任何运行时参数。 在solrj.query(args[0]); , args是指传递给程序的参数,如: java MyClass abc def 所以在上面的例子中args将是: args[0] -----> "abc" args[1] -----> "def" 因此,请确保在执行程序时传递正确的参数。 The reason is you are not supplying any runtime parameters while program exec ... -
solrj RealTime得到(solrj RealTime get)[2023-07-14]
由于RealTime Get是使用备用requestHandler实现的,因此您只需要在SolrQuery上使用setRequestHandler()方法,将"/get"作为处理程序名称。 有关完整示例,请参阅Solr源中此SolrExampleTests.java文件中的testRealTimeGet()方法。 这是该文件的片段: SolrQuery q = new SolrQuery(); q.setRequestHandler("/get"); q.set("id", "DOCID"); ... -
确保将\ solr- \ dist中的所有jar文件都放到servlet容器(Tomcat)的lib目录中。 org.apache.solr.client.solrj.SolrServerException类位于solr-solrj-.jar文件中,需要在运行时可用。 还要确保重新启动Tomcat。 Make sure you have all the jar files from \solr-\dist to your servlet container's (Tomcat) lib directory. ...
-
solrj是与solr交互的java客户端api。 此外,solrj已经改变了基于solrj版本与solr交互的方式。 因此,请验证您正在使用的solr版本的文档。 通常,下面的代码片段应该负责获取solrj的所有依赖项。
solr-solrj org.apache.solr 4.10.3 Solrj查询响应(Solrj query Response)[2022-04-10]
谢谢Perikli,但它已经整理好了。 代码如下: SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr"); QueryResponse qResponse = solrServer.query(queryForFecthing); 实际上在创建QueryResponse对象时得到异常,即qResponse ,我认为这是因为我作为参数传递的查询(即上面是' queryForFecthing ')。 但这是错误的假设 ...似乎solr容器没有初始化。 尝试使用此代码初始化容器: String solrDir = "C:/Program Files/Apache Software Foundation/Tomcat 7.0/webapps/solr/new_core/"; //this solr Directory is home and specified core. //solrParams.set("qt", "/dataimport"); //solrParams.set("command", "full-impo ...使用SolrJ索引文档(Indexing document with SolrJ)[2023-01-07]
您需要在文档索引过程完成后提交。 因此,如果您重新启动solr,它将执行自动提交。 如果你不想重启Solr。 你可以试试 重新加载核心(请参阅下面的URL,根据您更改URL名称) http://127.0.0.1:8080/solr/admin/cores?action=RELOAD&core=core1 要么 使用solr.commit(); 在你的代码中 You need to commit after document indexing process is done. so if you resta ...评论后编辑: 在4.4.0版中,您需要使用load()函数来加载核心。 CoreContainer coreContainer = new CoreContainer("C:\\development\\solr-4.4.0\\example tasks\\solr"); container.load(); 如果您还没有看过[EmbeddedSolrSever的[solr wiki] [1],请看一下。 我希望它能解决你的问题。 谢谢! EDIT after comments: In version 4. ...如果要使用@Field(child = true)注释将嵌套文档作为bean插入solr,请参阅下面的URL: SOLRJ-6.0.0:插入一个bean对象,它将bean对象的列表关联给出空指针异常 If you want to insert nested document as a bean to solr using @Field(child=true) annotation then see below URL: SOLRJ-6.0.0: Insertion of a bean object whic ...