我正在开发一个Django网站,关于搜索引擎我有以下选择:
选择标准:
有什么好的建议?
注:对于用户实时输入的数据,希望延迟不超过15-30分钟
发布于 2018-02-07 06:59:17
我简单的介绍Apache Solr。
Solr 不能用于实时系统,但是对于搜索引擎来说,它是非常棒的
它适用于高流量网页-应用程序。它使用RAM,而不是CPU。
boost将会把结果进行排序。比如说,你想找一个名为约翰的人,boost则会帮你进行排序,如下。http://localhost:8983/solr/collection1/select?q=firstname:john^2&lastname:john
如你所见,首名字段的boosted评分是2。
Solr的速度非常快
Solr也能处理多表。只需要提高RAM就能轻松解决。RAM更高,Solr的速度越快。
易于使用,Solr可以很方便的结合Django,你可以通过Haystack实现
Solr在RAM上运行,如果RAM很高,你就不用担心
Solr是高度可伸缩的。有以下特性
对于上面的场景,您可以使用包含Solr的拼写检查组件。
假设您是在Linux环境下,您可以继续。(我的是Ubuntu 14.04版)
详细安装
下载Apache Solr
下载后,将其解压缩到您选择的文件夹中。进入目录
shankar@shankar-lenovo: cd Downloads/solr-4.8.1
Jetty是 solr-4.8.1的一个实例
。因此你可以这样启动
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar
最小化终端,让他运行
检查Solr是否成功运行,访问http://localhost:8983/Solr
它默认运行在端口8983上。您可以运行下面语句或直接在jetty.xml进行设置
。
java -Djetty.port=9091 -jar start.jar
这个JAR文件充当了连接MySQL和JDBC
下载后,解压缩文件夹并复制mysql-connector-java-5.1.31-bin.jar
并将其粘贴到Lib目录。
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/contrib/dataimporthandler/lib
Solr要使用的话,您需要搜索一些表和数据。为此,我们将使用MySQL创建一个表并推送一些随机名称,然后我们可以使用Solr连接到MySQL索引那个表和它的条目。
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)
);
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');
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1/example/solr/collection1/conf
将这两个指令添加到此文件中。
<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>
如果文件存在,则忽略,将这些行添加到该文件中。您可以看到第一行,您需要提供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字段,如果它们是相同的,那么索引将被跳过。)
添加下面内容到schema.xml文件中.
<uniqueKey>id</uniqueKey>
<field name="solr_name" type="string" indexed="true" stored="true" />
实施
这才是真正的交易。您需要对MySQL到索尔以便使用Solr查询。
打开 URL http://localhost:8983/Solr在你的浏览器上。
你会发现有很多黄色的警告
没有错误。可以继续
使用DIH,您将连接到MySQL从Solr通过配置文件db-data-config.xml配置Solr的接口,并从索引到的数据库中检索这10条记录。
或者,您可以使用直接完全导入这样的查询也是..。
http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true
在你点击之后执行,,,Solr开始索引记录,如果有错误,它会说索引失败
如果索引成功完成,您将得到此通知。
步骤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
https://stackoverflow.com/questions/-100003172
复制相似问题