除了回答OP的查询之外,让我从简单的介绍到详细的安装和实现,对Apache Solr进行一些分析。
简单介绍
任何对以上搜索引擎或其他不在列表中的引擎有经验的人-我很想听听您的意见。
Solr不应用于解决实时问题。对于搜索引擎而言,Solr几乎是一款游戏,并且可以完美运行。
Solr在“高流量” Web应用程序上运行良好(我在某处读到它不适合此操作,但我正在备份该声明)。它利用RAM,而不是CPU。
该升压帮助你的排名结果中显示在上面。我说,你想搜索的名字约翰在田里名字和姓氏,以及你想给相关的姓名字段,那么你需要提高了名字字段,如图所示。
http://localhost:8983/solr/collection1/select?q=firstname:john^2&lastname:john
如您所见,名字字段的得分提高了2。
有关Solr相关性的更多信息
速度之快令人难以置信,并且对此毫不妥协。我之所以搬到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云一起使用,它会使用其Round-Robin机制自动处理负载平衡)
- 分布式搜索
- 高可用性
对于上述情况,你可以使用SpellCheckComponent是挤满了Solr的。还有很多其他功能,SnowballPorterFilterFactory有助于检索记录,例如,如果您键入的是书籍而不是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
目录的examples文件夹中,因此请在其中导航并启动Jetty Application Server。
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar
现在,不要关闭端子,将其最小化并放在一边。
(提示:在start.jar之后使用&来使Jetty Server在后台运行)
要检查Apache Solr是否成功运行,请在浏览器上访问此URL。http:// localhost:8983 / solr
在自定义端口上运行码头
默认情况下,它在端口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,你将连接到MySQL的从Solr的通过配置文件DB数据-config.xml中从Solr的接口和检索其编入索引到数据库中的10条记录Solr的。
为此,选择“ 完全导入”,然后选中“ 清除并提交 ”选项。现在,如图所示,单击执行。
另外,您也可以像这样直接使用完全导入查询。
http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true
单击Execute之后,Solr开始对记录进行索引,如果有任何错误,它将显示Indexing Failed,并且您必须返回到Logging部分以查看出了什么问题。
假设此配置没有错误,并且索引成功完成,您将收到此通知。
步骤4:运行Solr查询
似乎一切顺利,现在您可以使用Solr查询来查询已索引的数据。单击左侧的查询,然后按底部的执行按钮。
您将看到所示的索引记录。
用于列出所有记录的相应Solr查询为
http://localhost:8983/solr/collection1/select?q=*:*&wt=json&indent=true
好吧,这里有所有10个索引记录。说,我们只需要以Ja开头的名称,在这种情况下,您需要定位列名solr_name
,因此查询如下。
http://localhost:8983/solr/collection1/select?q=solr_name:Ja*&wt=json&indent=true
这就是您编写Solr查询的方式。要了解更多信息,请查看这篇精美的文章。