我正在开发一个Django网站,关于搜索引擎我有以下选择:

  • Lucene/Lucene with Compass/Solr
  • Sphinx
  • PostgreSQL
  • MySQL

选择标准:

  • 通过结果相关性排序
  • 检索速度
  • 易于使用,易于与Django集成
  • 资源需求:站点将托管在VPS,因此理想情况下,搜索引擎不需要大量的RAM和CPU。
  • 可伸缩性
  • 额外的功能,相关搜索

有什么好的建议?

注:对于用户实时输入的数据,希望延迟不超过15-30分钟

pyjplpyjpl提问于
小川医学生回答于

Apache Solr

我简单的介绍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实现

  • 需求:站点将在VPS上托管,所以理想情况下,搜索引擎不需要大量的RAM和CPU。

Solr在RAM上运行,如果RAM很高,你就不用担心

  • 可伸缩性

Solr是高度可伸缩的。有以下特性

  • 切分
  • 负载平衡
  • 分布式搜索
  • 高可用性
  • 额外的功能,如“您的意思是?”,相关的搜索等。

对于上面的场景,您可以使用包含Solr的拼写检查组件。

假设您是在Linux环境下,您可以继续。(我的是Ubuntu 14.04版)

详细安装

开始

下载Apache Solr

下载后,将其解压缩到您选择的文件夹中。进入目录

shankar@shankar-lenovo: cd Downloads/solr-4.8.1

启动Jetty应用程序服务器

Jetty是 solr-4.8.1的一个实例。因此你可以这样启动

shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar

最小化终端,让他运行

检查Solr是否成功运行,访问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

创建要链接到ApacheSolr的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.Navigate to

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查询。

步骤1:转到Solr管理小组

打开 URL http://localhost:8983/Solr在你的浏览器上。

步骤二:检查日志

你会发现有很多黄色的警告

没有错误。可以继续

步骤3:dih(数据导入处理程序)

使用DIH,您将连接到MySQLSolr通过配置文件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

回答过的其他问题

求大神帮忙看下云主机,安全组配置了开放全部服务器,但是有一条规则显示拒绝并且不能删除?

小川医学生
安全组的规则是类似白名单的规则,除了你明确填写出来的要允许的外默认拒绝处理。所以最后一条全部拒绝是系统默认添加且不能删除的。 安全组的优先级是从上到下,有流量时会按照第一条规则开始依次判断是否匹配规则,若不匹配则开始判断下一条,若匹配则直接应用对应的策略。 按照你的截图来看在全部...... 展开详请

“www记录添加失败:记录有冲突,已经存在重复记录或者CNAME、URL冲突”,应该如何解决?

小川医学生

同一个RR,有些记录不能同时存在,比如如CNAME记录与A记录不能同时存在,CNAME记录与MX记录不能同时存在等,如果发生冲突请变换RR,使用其他子域名添加对应记录。

如何使用gcc编译运行C程序?

小川医学生
预编译: gcc -E -o a.e a.c 预编译a.c文件,生成的目标文件名为a.e 预编译就是将include包含的头文件内容替换到C文件中,同时删除代码中没用的注释 示例: //main.c #include <stdio.h> #include "sum.h" int ...... 展开详请

OCR文字识别技术有哪些应用?

小川医学生
手Q就有这个技术啊,在扫一扫、聊天窗口和空间图片大图预览共三个入口上支持了提取图片中文字的功能,可以方便的阅读、编辑、保存图片上的文字,从而可以对提取出的文字进行翻译、搜索。在多种场景下可以极大提升用户对图片上文字的阅读和记录效率 [图片] ... 展开详请

深度学习在腾讯云上有哪些应用?

小川医学生

我记得今年云+峰会上马化腾说AI in ALL ,然后很多AI产品都免费了,想学学如何使用啊~

常见NoSQL数据库的应用场景是怎么样的?

小川医学生

GrapgDB,最主要的优点就是解决了图计算,我个人觉得图数据库以后会更流行。

扫码关注云+社区