首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >全文搜索引擎的比较-Lucene,Sphinx,PostgreSQL,MySQL?

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

Stack Overflow用户
提问于 2018-02-07 01:19:57
回答 8查看 0关注 0票数 0

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

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

选择标准:

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

有什么好的建议?

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

EN

Stack Overflow用户

发布于 2018-02-07 06:59:17

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.表结构

代码语言:javascript
复制
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.把上表

代码语言:javascript
复制
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

代码语言:javascript
复制
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1/example/solr/collection1/conf

2.修改solrconfig.xml

将这两个指令添加到此文件中。

代码语言:javascript
复制
  <lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
  <lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />

现在添加DIH(数据导入处理程序)

代码语言:javascript
复制
<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数据库的凭据。数据库名称、用户名和密码。

代码语言:javascript
复制
<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文件中.

代码语言:javascript
复制
<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条记录。

或者,您可以使用直接完全导入这样的查询也是..。

代码语言:javascript
复制
http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true

在你点击之后执行,,,Solr开始索引记录,如果有错误,它会说索引失败

如果索引成功完成,您将得到此通知。

步骤4:运行Solr查询

现在你可以用Solr查询已索引的数据。单击查询在左边,然后按执行

如图所示,您将看到索引记录。

对应Solr列出所有记录的查询是

代码语言:javascript
复制
http://localhost:8983/solr/collection1/select?q=*:*&wt=json&indent=true

所有10个索引记录都有。比如说,我们只需要名字Ja,在这种情况下,需要将列名作为目标。solr_name,因此,你的查询应该是这样的

代码语言:javascript
复制
http://localhost:8983/solr/collection1/select?q=solr_name:Ja*&wt=json&indent=true
票数 0
EN
查看全部 8 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档