织梦DedeCMS v5.7全文检索使用说明(sphinx)

织梦DedeCMS v5.7全文检索使用说明(sphinx)

简介

织梦DedeCMS是一款常用的CMS系统,其中的全文检索功能相当实用。为了提升全文检索的效率和准确度,我们可以使用sphinx进行优化,提高搜索速度和搜索结果的相关性。

安装sphinx

  1. 下载sphinx

可以在sphinx官网下载最新的sphinx安装包。

  1. 安装sphinx

以Linux系统为例,下载后解压缩,进入解压缩后的目录,执行以下命令安装:

bash
./configure --prefix=/usr/local/sphinx --with-mysql --with-pgsql
make && make install

安装完成后,可以启动sphinx服务:

bash
/usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf

启动成功后,可以通过命令ps aux | grep searchd查看sphinx进程是否在运行中。

安装sphinx扩展

  1. 进入DedeCMS根目录,找到include目录下的sphinxapi.php文件,在其中添加以下代码:

php
define('SPHINX_SEARCHD_HOST', 'localhost'); // sphinx服务端地址
define('SPHINX_SEARCHD_PORT', 9312); // sphinx服务端端口

  1. 在DedeCMS后台,进入插件管理,安装扩展模块“全文检索(sphinx)”并启用。

配置sphinx索引

  1. 在织梦DedeCMS后台,进入“系统管理”-“高级参数”-“全站基本参数”,勾选“启用Sphinx全站搜索”,并填写sphinx服务端地址和端口。

  2. 在sphinx服务端配置文件sphinx.conf中添加索引配置,比如:

```
source my_source
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = my_password
sql_db = my_database
sql_port = 3306
sql_query = SELECT id, title, content FROM my_table WHERE status = 1
sql_attr_uint = id
}

index my_index
{
source = my_source
path = /usr/local/sphinx/var/data/my_index
docinfo = extern
mlock = 0
morphology = stem_en
min_word_len = 2
charset_type = utf-8
html_strip = 1
ignore_chars = U+0080..U+00FF
min_infix_len = 3
enable_star = 1
}
```

这段配置将创建一个名为“my_index”的索引,索引内容取自MySQL中名为“my_table”的表的“id”、“title”、“content”字段(这里只搜索“status”字段值为1的记录),并对内容进行词干分析、停止词过滤等处理。

  1. 建立索引

在sphinx服务端执行以下命令,建立索引:

bash
/usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf --all

  1. 重启sphinx服务端

bash
/usr/local/sphinx/bin/searchd --stop
/usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf

使用sphinx全文检索

在代码中调用以下接口即可利用sphinx进行全文检索:

$searchtype = '7'; // 全文检索类型为sphinx
$keyword    = '搜索关键词';
$channelid  = '1'; // 搜索的栏目ID
$orderby    = 'score'; // 按相关性排序
$orderway   = 'desc'; // 降序排列
$pagesize  = '10'; // 每页展示的搜索结果数量
$offset    = '0'; // 搜索结果的起始偏移量(从0开始)
include(DEDEINC.'/dede_search.class.php');
$so = new DedeSearch($searchtype, $channelid, $orderby, $orderway, $pagesize, $offset, $keyword);
$result = $so->Display();

在搜索结果中,可以通过以下代码获取搜索结果数量和搜索结果列表:

$num    = $so->RecordCount();
$artlist = $so->GetArray();

示例

以下示例演示如何利用sphinx搜索文章标题中包含“织梦”的文章:

  1. 配置sphinx索引

sphinx.conf文件中添加以下索引配置:

```
source demo_source
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = my_password
sql_db = my_database
sql_port = 3306
sql_query = SELECT id, title, description, content FROM dede_archives WHERE title LIKE '%织梦%' AND typeid = 1
sql_attr_uint = id
}

index demo_index
{
source = demo_source
path = /usr/local/sphinx/var/data/demo_index
docinfo = extern
mlock = 0
morphology = stem_en
min_word_len = 2
charset_type = utf-8
html_strip = 1
ignore_chars = U+0080..U+00FF
min_infix_len = 3
enable_star = 1
}
```

这段配置将创建一个名为“demo_index”的索引,索引内容取自DedeCMS中文章标题中含有“织梦”的记录(且文章所属栏目为“1”),并对内容进行词干分析、停止词过滤等处理。

  1. 建立索引

在sphinx服务端执行以下命令,建立索引:

bash
/usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf demo_index --rotate

注意,这里因为只建立demo_index这一个索引,为了节省时间可以只创建这一个索引,而不是创建所有索引。

  1. 搜索

在代码中调用以下接口进行搜索:

php
$searchtype = '7'; // 全文检索类型为sphinx
$keyword = '织梦';
$channelid = '1'; // 搜索的栏目ID
$orderby = 'score'; // 按相关性排序
$orderway = 'desc'; // 降序排列
$pagesize = '10'; // 每页展示的搜索结果数量
$offset = '0'; // 搜索结果的起始偏移量(从0开始)
include(DEDEINC.'/dede_search.class.php');
$so = new DedeSearch($searchtype, $channelid, $orderby, $orderway, $pagesize, $offset, $keyword);
$num = $so->RecordCount();
$artlist = $so->GetArray();
print_r($artlist);

这段代码将返回包含“织梦”的文章列表。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:织梦DedeCMS v5.7全文检索使用说明(sphinx) - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • java 执行redis的部分方法

    @Autowired private RedisTemplate<String, Object> redisTemplate; public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) { this.redisTemplate = redisTe…

    Redis 2023年4月12日
    00
  • SQL如何按照年月来查询数据问题

    针对“SQL如何按照年月来查询数据问题”,我们可以通过指定日期的年月来查询数据。下面是详细攻略: 1. 使用DATE_FORMAT函数 SQL的日期格式是默认的yyyy-MM-dd格式,可以使用DATE_FORMAT函数将日期格式化为年月形式。具体操作如下: SELECT * FROM table_name WHERE DATE_FORMAT(date_co…

    database 2023年5月22日
    00
  • SQL 根据字符串里的数字排序

    首先,SQL中可以使用ORDER BY语句对查询结果进行排序。如果需要对字符串中的数字进行排序,可以利用SQL中的函数来实现。 下面是两个SQL语句的示例,展示如何按照字符串中的数字进行排序: 使用CAST函数进行转换排序: SELECT id, name FROM table_name ORDER BY CAST(SUBSTR(name, 4) AS UN…

    database 2023年3月27日
    00
  • springboot redis多数据源

    springboot中默认的redis配置是只能对单个redis库进行操作的。 那么我们需要多个库操作的时候这个时候就可以采用redis多数据源。 本代码参考RedisAutoConfiguration源码进行整改成的多数据源配置   注意:数据源2就是数据源1copy了一份代码,把所有的gisredis改成appredis,并去除数据源2的@Primary…

    Redis 2023年4月13日
    00
  • mysql中IFNULL,IF,CASE的区别介绍

    区别介绍: IFNULL函数的作用是判断表达式是否为NULL,若为NULL则返回指定的值,否则返回原值。 语法:IFNULL(expr1,expr2) 示例: 如果customers表中的address字段为空,则将address的值替换为’Unknown’。 UPDATE customers SET address = IFNULL(address, ‘U…

    database 2023年5月22日
    00
  • python对redis的连接和操作

    一、redis   redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作…

    Redis 2023年4月11日
    00
  • SQL常用日期查询语句及显示格式设置

    下面就对SQL常用日期查询语句及显示格式设置进行详细讲解。 一、日期格式 在SQL中,日期时间类型有很多种表示方法,包括日期(Date)、时间(Time)、日期时间(DateTime)、时间戳(TimeStamp),不同的数据库支持的日期时间类型也有所不同。在使用SQL中,一般建议按照ISO标准进行日期时间的表示,即yyyy-MM-dd格式表示日期,HH:m…

    database 2023年5月21日
    00
  • SQL Server中JSON函数的用法详解

    SQL Server中JSON函数的用法详解 本文将为大家详细讲解SQL Server 中JSON函数的用法,包括以下部分:1. JSON数据类型介绍2. JSON的查询、修改、删除和插入3. SQL Server中JSON函数的详细说明4. 函数示例说明 1. JSON数据类型介绍 在SQL Server2016中首次引入了JSON数据类型,使我们可以在S…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部