全文搜索引擎的比较-Lucene,Sphinx,PostgreSQL,MySQL?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (8)
  • 关注 (0)
  • 查看 (235)

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

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

选择标准:

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

有什么好的建议?

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

提问于
用户回答回答于

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

热门问答

腾讯云 COS 怎么才能外链调用 m3u8 到别的网站播放?

滑稽园扛把子

Swoole · PHP开发工程师 (已认证)

As a PHP Developer
推荐
设置公有读私有写:当访问对象时,COS 读取到对象的权限为公有读,此时无论存储桶为何种权限,对象都可以被直接下载 设置步骤 登录 对象存储控制台,选择左侧菜单栏【存储桶列表】,进入存储桶列表页面。单击需要修改对象权限的对应存储桶,进入存储桶。 📷 找到需要设置权限的对象(如 e...... 展开详请

Ubuntu搭建的WordPress如何修改php.ini?

滑稽园扛把子

Swoole · PHP开发工程师 (已认证)

As a PHP Developer
推荐
php新手很多不知道怎么查配置文件在哪,这里提供一个很简单的方法 使用 php -i 命令可以打印php的详细信息,可以把这堆东西输出一下 php -i > outputphp.txt,结合 grep 查找命令 php -i| grep php.ini 打印结果如下 Config...... 展开详请

归档存储采用的存储介质是什么, 安全可靠吗?

滑稽园扛把子

Swoole · PHP开发工程师 (已认证)

As a PHP Developer
推荐
归档存储主要是针对海量、重要且访问频率极低的非结构化数据进行长期的归档保存和备份管理。 在数据安全层面,归档存储提供数据锁定机制,防止数据被修改和删除,保障数据安全。 技术架构: image.png 与对象存储的差异 归档存储 CAS 是一项离线存储服务,不同于在线的对象存储 ...... 展开详请

在按官网手册排错后依然提示1004错误?

看你的代码好像是短信相关的代码,1004错误代表请求包解析失败,通常情况下是由于没有遵守 API 接口说明规范导致的。 建议您通过以下方式定位解决: 首先,要确认发送的请求是否是标准的 json 格式; 第二,检查是否有将单引号当做双引号使用(json 标准应该是双引号); 第...... 展开详请

redis数据库应该怎样连接???

滑稽园扛把子

Swoole · PHP开发工程师 (已认证)

As a PHP Developer
推荐
实例初始化完成后,连接腾讯云Redis时,需要输入设置的密码。主从版和集群版的连接示例如下 主从版连接示例 主从版支持2种格式 • 格式1,“实例id:密码”的格式类型,例如您的实例id是crs-bkuza6i3,设置的密码是abcd1234,则连接命令如下 redis-cli ...... 展开详请

如何使用holer实现从外网访问本地WEB应用?

Dingda

Dingda · 站长 (已认证)

多一些不为什么的坚持
推荐
解压holer软件 获取holer access key信息: 在holer官网上申请专属的holer access key或者使用开源社区上公开的access key信息。 启动holer服务: Windows系统平台: 打开CMD窗口进入可执行程序所在的目录下,执行命令:...... 展开详请

扫码关注云+社区