除了回答 OP 的疑问之外,让我从简单的介绍到详细的安装和实现,对Apache Solr进行一些见解。
简单介绍
任何对上述搜索引擎或未在列表中的其他引擎有经验的人——我很想听听您的意见。
Solr不应该用于解决实时问题。对于搜索引擎,Solr几乎是游戏,并且可以完美运行。
Solr在高流量 Web 应用程序上运行良好(我在某处读到它不适合此,但我支持该声明)。它使用 RAM,而不是 CPU。
提升可帮助您将结果排在首位。假设,您尝试在firstname和lastname字段中搜索名称john,并且您想为firstname字段提供相关性,那么您需要提升firstname字段,如图所示。
http://localhost:8983/solr/collection1/select?q=firstname:john^2&lastname:john
如您所见,名字字段的得分提高了 2。
更多关于SolrRelevancy
速度快得令人难以置信,而且毫不妥协。我搬到Solr的原因。
关于索引速度,Solr还可以处理来自数据库表的JOINS 。更高更复杂的JOIN确实会影响索引速度。但是,巨大的RAM配置可以轻松解决这种情况。
RAM 越高,Solr 的索引速度越快。
从未尝试过集成Solr和Django,但是您可以使用Haystack来实现。我发现了一些有趣的文章,这里是它的github。
- 资源要求 - 站点将托管在 VPS 上,因此理想情况下搜索引擎不需要大量 RAM 和 CPU
Solr在 RAM 上繁殖,因此如果 RAM 很高,您不必担心Solr。
如果您有数十亿条记录, Solr 的RAM 使用量会在全索引时猛增,您可以巧妙地利用 Delta 导入来解决这种情况。如前所述,Solr 只是一种近乎实时的解决方案。
Solr具有高度可扩展性。看看SolrCloud。它的一些关键特性。
- 分片(或分片是在多台机器之间分配索引的概念,比如如果您的索引变得太大)
- 负载平衡(如果Solrj与 Solr 云一起使用,它会使用它的循环机制自动处理负载平衡)
- 分布式搜索
- 高可用性
对于上述场景,您可以使用与Solr打包的SpellCheckComponent。还有很多其他功能,SnowballPorterFilterFactory有助于检索记录,例如,如果您键入的是books而不是book,您将看到与book相关的结果。
这个答案广泛关注Apache Solr & MySQL。Django 超出范围。
假设您在 LINUX 环境下,您可以继续阅读本文。(我的是 Ubuntu 14.04 版本)
详细安装
入门
从这里下载Apache Solr。那将是版本4.8.1。你可以下载新版本,我发现这个很稳定。
下载存档后,将其解压缩到您选择的文件夹中。说.. Downloads
或其他..所以它看起来像Downloads/solr-4.8.1/
根据您的提示.. 在目录中导航
shankar@shankar-lenovo: cd Downloads/solr-4.8.1
所以现在你在这里..
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1$
启动 Jetty 应用服务器
Jetty在solr-4.8.1
目录的示例文件夹中可用,因此在其中导航并启动 Jetty 应用程序服务器。
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar
现在,不要关闭终端,将其最小化并放在一边。
(提示:在 start.jar 之后使用 & 使 Jetty Server 在后台运行)
要检查Apache Solr是否成功运行,请在浏览器上访问此 URL。http://localhost:8983/solr
在自定义端口上运行 Jetty
它默认在端口 8983 上运行。您可以在此处或直接在jetty.xml
文件中更改端口。
java -Djetty.port=9091 -jar start.jar
下载 JConnector
这个 JAR 文件充当MySQL和 JDBC 之间的桥梁,在此处下载平台独立版本
下载后解压文件夹,复制mysql-connector-java-5.1.31-bin.jar
粘贴到lib目录下。
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/contrib/dataimporthandler/lib
创建要链接到 Apache Solr 的 MySQL 表
要使用Solr,您需要有一些表和数据要搜索。为此,我们将使用MySQL创建一个表并推送一些随机名称,然后我们可以使用Solr连接到MySQL并索引该表及其条目。
1.表结构
CREATE TABLE test_solr_mysql
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(45) NULL,
created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
2.填充上表
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jean');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jack');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jason');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Vego');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Grunt');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jasper');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Fred');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jenna');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Rebecca');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Roland');
进入核心并添加 lib 指令
1.导航到
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1/example/solr/collection1/conf
2.修改solrconfig.xml
将这两个指令添加到此文件中..
<lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />
现在添加DIH(数据导入处理程序)
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler" >
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>
3.创建 db-data-config.xml 文件
如果文件存在则忽略,将这些行添加到该文件。如您所见,您需要提供MySQL数据库的凭据。数据库名称、用户名和密码。
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/yourdbname" user="dbuser" password="dbpass"/>
<document>
<entity name="test_solr" query="select CONCAT('test_solr-',id) as rid,name from test_solr_mysql WHERE '${dataimporter.request.clean}' != 'false'
OR `created` > '${dataimporter.last_index_time}'" >
<field name="id" column="rid" />
<field name="solr_name" column="name" />
</entity>
</document>
</dataConfig>
(提示:您可以拥有任意数量的实体,但要注意 id 字段,如果它们相同,则将跳过索引。)
4.修改schema.xml文件
如图所示,将此添加到您的schema.xml中。
<uniqueKey>id</uniqueKey>
<field name="solr_name" type="string" indexed="true" stored="true" />
执行
索引
这是真正的交易。您需要对从MySQL到Solr的数据进行索引,以便使用 Solr 查询。
第 1 步:转到 Solr 管理面板
在浏览器上点击 URL http://localhost:8983/solr 。屏幕是这样打开的。

如标记所示,转到日志记录以检查上述任何配置是否导致错误。
第 2 步:检查您的日志
好的,现在你在这里,你可以有很多黄色消息(警告)。确保您没有将错误消息标记为红色。早些时候,在我们的配置中,我们在db-data-config.xml上添加了一个选择查询,假设该查询有任何错误,它会显示在这里。

很好,没有错误。我们可以走了。如图所示,让我们从列表中选择collection1并选择Dataimport
第 3 步:DIH(数据导入处理程序)
使用 DIH,您将通过 Solr 接口中的配置文件 db-data-config.xml 从 Solr 连接到MySQL,并从数据库中检索10 条记录,这些记录被索引到Solr上。
为此,请选择full-import,然后检查选项Clean和Commit。现在单击执行,如图所示。
或者,您也可以使用像这样的直接完全导入查询..
http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true

单击Execute后,Solr开始对记录进行索引,如果有任何错误,它会说Indexing Failed并且您必须返回Logging部分查看出了什么问题。
假设此配置没有错误,并且索引编制成功完成,您将收到此通知。

第 4 步:运行 Solr 查询
似乎一切都很顺利,现在您可以使用Solr Queries 来查询被索引的数据。单击左侧的查询,然后按底部的执行按钮。
您将看到如图所示的索引记录。
列出所有记录的相应Solr查询是
http://localhost:8983/solr/collection1/select?q=*:*&wt=json&indent=true

好吧,所有 10 条索引记录都有了。比如说,我们只需要以Ja开头的名称,在这种情况下,您需要定位列 name solr_name
,因此您的查询是这样的。
http://localhost:8983/solr/collection1/select?q=solr_name:Ja*&wt=json&indent=true

这就是您编写Solr查询的方式。要了解更多信息,请查看这篇漂亮的文章。