「Solrj数据库」:如何使用Solrj在Java中连接和操作数据库? (solrj 数据库)

Solrj数据库:如何使用Solrj在Java中连接和操作数据库?

Solrj是一个Java客户端库,可以用来连接和操作Solr搜索引擎。但是,它也可以用来连接和操作数据库。在本文中,我们将介绍如何使用Solrj在Java中连接和操作数据库。

我们需要添加Solrj库到我们的Java项目中。Solrj库可以通过Maven或Gradle等Java包管理器来获取,也可以手动下载并添加到项目中。在这篇文章中,我们将使用Maven,并在pom.xml文件中添加以下依赖项:

“`

org.apache.solr

solr-solrj

9.0.0

“`

这将下载Solrj库,并添加到我们的Java项目中。

接下来,我们需要连接到数据库。Solrj支持连接到多种类型的数据库,包括MySQL、Oracle、PostgreSQL和MongoDB等。在本文中,我们将使用MySQL作为我们的数据库。

我们将首先创建一个DbConnection类,用于处理数据库连接。我们将使用Java的JDBC API来连接到MySQL数据库。以下是DbConnection.java的内容:

“`

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class DbConnection {

private String url = “jdbc:mysql://localhost:3306/mydatabase”;

private String username = “root”;

private String password = “password”;

private Connection conn = null;

public Connection getConnection() {

try {

conn = DriverManager.getConnection(url, username, password);

System.out.println(“Connected to database.”);

} catch (SQLException e) {

e.printStackTrace();

System.out.println(“Fled to connect to database.”);

}

return conn;

}

}

“`

在上面的代码中,我们将连接到名为“mydatabase”的MySQL数据库,使用用户root和密码password。我们创建了getConnection()方法,该方法将连接到数据库并返回数据库连接对象。

现在,我们已经连接到MySQL数据库,并且我们需要执行一些查询和更新操作。我们将使用Solrj来执行这些操作。Solrj提供了多个类,用于连接和操作数据库,例如SolrClient、SolrQuery和SolrInputDocument等。以下是一个示例,介绍如何使用Solrj执行Select查询,以及如何使用SolrInputDocument添加新数据记录:

“`

import com.google.gson.Gson;

import org.apache.solr.client.solrj.impl.HttpSolrClient;

import org.apache.solr.common.SolrDocument;

import org.apache.solr.common.SolrInputDocument;

import java.util.List;

import java.util.Map;

public class MyApp {

private static final String SOLR_URL = “http://localhost:8983/solr/mycore”;

private static final int COMMIT_WITHIN_MILLIS = 10000;

public static void mn(String[] args) {

DbConnection dc = new DbConnection();

Connection conn = dc.getConnection();

// Create a Solr client to connect to Solr server

HttpSolrClient solr = new HttpSolrClient.Builder(SOLR_URL).build();

try {

// Select query to retrieve data from the database

String query = “SELECT * FROM mytable”;

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(query);

// Loop over the result set and add new documents to Solr

while (rs.next()) {

SolrInputDocument doc = new SolrInputDocument();

doc.addField(“id”, rs.getInt(“id”));

doc.addField(“name”, rs.getString(“name”));

doc.addField(“age”, rs.getInt(“age”));

doc.addField(“eml”, rs.getString(“eml”));

solr.add(doc, COMMIT_WITHIN_MILLIS);

}

// Commit the changes to the Solr server

solr.commit();

// Select query to retrieve data from Solr

Map queryMap = new HashMap();

queryMap.put(“q”, “*:*”);

queryMap.put(“rows”, “10”);

queryMap.put(“fl”, “id,name,age,eml”);

SolrQuery solrQuery = new SolrQuery();

solrQuery.add(queryMap);

QueryResponse response = solr.query(solrQuery);

// Loop over the result set and print the data

List docs = response.getResults();

Gson gson = new Gson();

for (SolrDocument doc : docs) {

System.out.println(gson.toJson(doc));

}

} catch (SQLException | SolrServerException | IOException e) {

e.printStackTrace();

}

}

}

“`

在上面的代码中,我们首先创建了一个HttpSolrClient对象,连接到名为“mycore”的Solr搜索引擎。然后,我们执行SELECT查询,将结果集添加到Solr中。我们使用SolrInputDocument类创建新的数据记录。SolrInputDocument包含一个或多个SolrInputField对象,每个对象表示一个数据字段。我们可以使用addField()方法向SolrInputDocument中添加新字段。

接下来,我们使用Solr的查询语法,通过SolrQuery实现查询。SolrQuery支持多种查询选项,例如分页(pagination)、过滤(filtering)和排序(sorting)等。我们在查询中指定了一些选项,例如查询所有记录、返回前10条记录,以及只返回指定的字段。我们通过Solr的QueryResponse对象获取查询结果,并通过Gson类将结果转换为ON格式进行输出。

我们需要注意的一点是,我们需要使用solr.commit()方法将更改提交到Solr服务器。默认情况下,提交操作是异步的,并且会在稍后执行。我们使用COMMIT_WITHIN_MILLIS参数来强制同步提交操作,以确保Solr数据和数据库数据始终同步。

相关问题拓展阅读:

java web 怎么用solr

我们下载的Solr包后,进入Solr所在的目录,我们可以看到以下几个目录:build、client、dist、example、lib、site、src。下面分别对其进行介绍。

1)build:该目录是在ant build过程中生成的,其中包含了未被打包成jar或是war的class文件以及一些文档文件。

2)client:该目录包含了特定语言的Solr客户端API,使得使用其他语言的用户能通过HTTP用XML与Solr进行通话。现在该目录里面虽然包含javascript、python、ruby三个子目录,但是到目前为止只包含一部分的ruby的代码,其他语言仍是空的。另外,Solr的Java客户端称为SolrJ,其代码位于src/solrj目录下面。在之后的文章中我会详细介绍Solr客户端的使用。

3)dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。还记得上一篇文章中,我们在build 1.4版本的Solr源代码后需要部署example吗?其实就是将该目录下面的apache-solr-1.4.war部署到Jetty上面去,并重命名为solr.war。

4)example:这个目录实际上是Jetty的安装目录。其中包含了一些样例数据和一些Solr的配置。

其中一些子目录也比较重要,这里也对它们稍作介绍。

l example/etc:该目录包含了Jetty的配置,在这里我们可以将Jetty的默认端口从8983改为80端口。

l 将其中的8983端口换成80端口。注意更改端口后启动Jetty可能会提示你没有权限,你需要使用sudo java -jar start.jar来运行。

l example/multicore:该目录包含了在Solr的multicore中设置的多个home目录。在之后的文章中我会对其进行介绍。

l example/solr:该目录是一个包含了默认配置信息的Solr的home目录。

详见下面的“solr home说明”

l example/webapps:Jetty的webapps目录,该目录通常用来放置Java的Web应用程序。在Solr中,前面提到的solr.war文件就部署在这里。

5) lib:该目录包含了所有Solr的API所依赖的库文件。其中包括Lucene,Apache commons utilities和用来处理XML的Stax库。

6) site:该目录仅仅包含了Solr的官网的网页内容,以及一些教程的PDF文档。

7) src:该目录包含了Solr项目的整毕困个源代码。这里对其各个子目录也做相应的介绍。

l src/java:该目录存放的是Solr使用Java编写的源代码。

l src/scripts:该目录存放的是配置Solr服务器的Unix BashShell脚本,在后面介绍多服务器配置中将会有重要的作用。

l src/solrj:前面提到过该目录存放的是Solr的Java版本的客户端代码。

l src/test:该目录存放的是测试程序的源代码隐坦和测试文件。

l src/webapp:该目录存放的是管理Solr的Web页面,包括Servlet和P文件,其构成了前面提到的WAR文件。管理Solr的P页面在web/admin目录下面,如果你有兴趣折腾Solr可以找到相应的P的页面对其进行设置

1.4.2 Solr home说明

所谓的Solr home目录实际上是一个运行的Solr实例所对应的配置和数据(Lucene索引)。在上一篇文章中我提到过在Solr的example/solr目录就是一个Solr用做示例的默认配置home目录。实际上example/multicore也是一个合法的Solr home目录,只不过是用来做mult-core设置的。那么我们来看看example/solr这个目录里面都有些什么。

example/solr目录下主要有以下一些目录和文件:

1) bin:如果你需要对Solr进行更高级的配置,该目录建议用来存放Solr的复制脚本。

2) conf :该目手携念录下面包含了各种配置文件,下面列出了两个最为重要的配置文件。其余的.txt和.xml文件被这两个文件所引用,如用来对文本进行特殊的处理。

l conf/schema.xml:该文件是索引的schema,包含了域类型的定义以及相关联的yzer链。

l conf/solrconfig.xml:该文件是Solr的主配置文件。

l conf/xslt:该目录包含了各种XSLT文件,能将Solr的查询响应转换成不同的格式,如:Atom/RSS等。

3) data:包含了Lucene的二进制索引文件。

4) lib:该目录是可选的。用来放置附加的Java JAR文件,Solr在启动时会自动加载该目录下的JAR文件。这就使得用户可以对Solr的发布版本(solr.war)进行扩展。如果你的扩展并不对Solr本身进行修改,那么就可以将你的修改部署到JAR文件中放到这里。

Solr是如何找到运行所需要的home目录的呢?

Solr首先检查名为solr.solr.home的Java系统属性,有几种不同的方式来设置该Java系统属性。一种不管你使用什么样的Java应用服务器或Servlet引擎都通用的方法是在调用Java的命令行中进行设置。所以,你可以在启动Jetty的时候显式地指定Solr的home目录java -Dsolr.solr.home=solr/ -jar start.jar。另一种通用的方法是使用JNDI,将home目录绑定到java:comp/env/solr/home。并向src/webapp/web/WEB-INF/web.xml添加以下一段代码:

1

solr/home

solr/

java.lang.String

5

实际上这段XML在web.xml文件中已经存在,你只需要把原来注释掉的xml取消注释,添加你所要指向的home目录即可。因为修改了web.xml文件,所以你需要运行antdist-war来重新打包之后再部署WAR文件。

最后,如果Solr的home目录既没有通过Java系统属性指定也没有通过JNDI指定,那么他将默认指向solr/。

在产品环境中,我们必须设置Solr的home目录而不是让其默认指向solr/。而且应该使用绝对路径,而不是相对路径,因为你有可能从不同的目录下面启动应用服务器。

注:Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如P和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。

我们先从使用者的角度出发,更先看到的当然是servlet,因为Solr本身是个独立的网络应用程序,需要在Servlet容器中运行来提供服务,所以servlet是用户接触的最外层。我们看看org.apache.solr.servlet包。这个包很简单,只有两个类:SolrServlet和SolrUpdateServlet.我们很容易从类名中猜出这两个类的用途。

SolrServlet类继承HttpServlet类,只有四个方法:

·init()

·destroy()

·doGet()

·doPost()

SolrServlet类中除了普通的Java类对象(包括Servlet相关的)外,有四个Solr本身的类,还有一个Solr本身的异常。其中两个类和一个异常属于org.apache.solr.core包,两个类属于org.apache.solr.request包。属于core包的有:

·Config:

·SolrCore:

属于request包的有:

·SolrQueryResponse:

·QueryResponseWriter:

分析一下这个SolrServlet类。首先servlet会调用init()方法进行初始化:通过Context查找java:comp/env/solr/home来确定Solr的主目录(home),接着调用Config.setInstanceDir(home)方法设置这个实例的目录。然后通过SolrCore.getSolrCore()来获得一个SolrCore实例。destroy()方法将会在Servlet对象销毁时调用,仅仅调用core.close()关闭SolrCore实例。

当用户请求进来时doPost()简单地将任务交给doGet()完成,主要的任务由doGet()完成。分析一下doGet()方法:

1) 使用SolrCore和doGet()参数request生成一个SolrServletRequest对象(注意:这个SolrServletRequest类不是公开类,位于org.apache.solr.servlet包中,继承了SolrQueryRequestBase类,仅仅接受SolrCore和HttpServletRequest对象作为参数)

2) 然后SolrCore执行execute()方法(参数为SolrServletRequest和SolrQueryResponse)

由此可见,真正的处理核心是SolrCore的execute方法

1、将解压包中的solr-4.7.1/dist/solr-4.7.1.war复制到tomcat_dir/webapps/目录,并命名为solr.war。

2、将solr-4.7.1/example/lib/ext/目录下的jar文件复制到tomcat/lib目录下,将solr-4.7.1/example/resources/下的log4j.properties文件复制到tomcat_dir/lib目录下;

切把 solr-4.7.1/example/solr,复制到tomcat_dir/bin下。

3、修改tomcat_dir/conf/server.xml

4、创建solr.xml,存放在路径:tomcat/conf/Catalina/localhost/solr.xml,内容:

PS:上面的docBase和value路径中不能存在中文字符,否则会出现404错误。

5、将C:\Tomcat 7.0\webapps下的solr.war包,启动项目解压;然后再添加几个jar包:

solr-4.7.1\dist\颤铅solr-dataimporthandler-4.7.1.jar;

solr-4.7.1\dist\solr-dataimporthandler-extras-4.7.1.jar;

还要加载数据库驱动包:mysql-connector-java-3.1.13-bin.jar

6、在C:\Tomcat 7.0\bin\solr\collection1\conf 下的solrconfig.xml增加以下数据库配置:

data-config.xml

7、将tomcat\bin\solr\collection1\conf下增带洞世加data-config.xml文件,内容如下:

8、增加中文分词器,ik-yzer的配置如下:蠢肢

①目前的中文分词主要有两种

1,基于中科院ICTCLAS的隐式马尔科夫hhmm算法的中文分词器,例如artcn等。(不支持自定义扩展词库)

2,基于正向迭代最细粒度切分算法(正向更大匹配并且最细分词)例如IK,庖丁等(支持自定义扩展词库)

安装分词前,可以去下载IK的分词包 :

IK-Analyzer-4.7.1-0.0.1-SNAPSHOT.jar

下载完毕后,将此包放进tomcat\solr的\WEB-INF\lib下面:tomcat\webapps\solr\WEB-INF\lib 。

下面需要在solr的schemal.xml进行分词器注册:

>

>

最后还得配置一个引用字段就OK了

②它的安装部署十分简单,将IKAnalyzer2023.jar部署亍项目的lib目录中;IKAnalyzer.cfg.xml不stopword.dic文件放置在class根目录(对于web项目,通常是WEB-I NF/classes目彔,同hibernate、log4j等配置文件相同)下即可 ;然后配置solr4.7中schema.xml配置解析器:

……

……

org.apache.solr.client.solrj.beans.field这是什么包

Solrj是Solr搜索服务器的一个比较基础的客户端工具,可以非常方便地与Solr搜索服务器进行交互。最基本的功能就是管理Solr索引,包括添加、更新、删除和查询等。

对于一些比较基础的应用,用Solj基本够用,而且你可以非常容易地通过使用Solrj的API实现与Solr搜索服务器进行交互,实现对Solr的基本管理功能。

如果你的应用比较复杂,可以扩展Solrj来满足需要。

关于solrj 数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 「Solrj数据库」:如何使用Solrj在Java中连接和操作数据库? (solrj 数据库)