PHP搜索优化 sphinx 实战

环境:win7 64 wamp

解压sphinx安装包后,简历如下结构。注意,conf目录是我的配置文件目录

在conf目录下,简历newdefend.conf文件,配置内容如下

# 配置数据源
source domain_src
{
    type            = mysql
    sql_host        = 192.168.185.210
    sql_user        = root
    sql_pass        =
    sql_db            = mydb
    sql_port        = 3306    

    sql_ranged_throttle    = 0
    sql_query_pre        = SET NAMES utf8
    # sql_query_pre       = SET SESSION query_cache_type=OFF
    sql_query_pre         = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM domain   # 注意这个地方,至少要有各自字段没有定义成sql_attr_***,好像是需要有一个字段是全文索引什么的。反正多查询一个字段就对了。或者定义一个sql_field_string也可以
    sql_query            = SELECT id,uid,type,package_level,ct,domain FROM domain         WHERE id<=( SELECT max_id FROM sph_counter WHERE counter_id = 1 )
    sql_attr_uint        = uid
    sql_attr_uint        = type
    sql_attr_uint        = package_level
    # sql_field_string        = ct
    sql_attr_timestamp    = ct
}

# 配置增量数据源
source delta_domain_src:domain_src{
    sql_ranged_throttle = 100
    sql_query_pre       = SET NAMES utf8
    # sql_query_pre       = SET SESSION query_cache_type=OFF
    sql_query            = SELECT id,uid,type,package_level,ct,domain FROM domain         WHERE id>( SELECT max_id FROM sph_counter WHERE counter_id = 1 )
}

# 索引
index domain_suggest
{
    source            = domain_src
    path            = D:/sphinx/data/domain_suggest
    charset_table     = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
    docinfo            = extern
    dict            = keywords
    mlock            = 0
    morphology        = none
    min_word_len    = 1
    ngram_len        = 1
    ngram_chars        = U+3000..U+2FA1F
    html_strip        = 0
}

# 增量索引
index delta_domain_suggest:domain_suggest {
    source             = delta_domain_src
    path            = D:/sphinx/data/delta_domain_suggest
}

indexer
{
    mem_limit        = 128M
}

# 配置Sphinx服务器的信息
searchd
{
    listen            = 9312
    listen            = 9306:mysql41
    log                = D:/sphinx/log/searchd.log
    query_log        = D:/sphinx/log/query.log
    read_timeout        = 5
    client_timeout        = 300
    max_children        = 30
    persistent_connections_limit    = 30
    pid_file            = D:/sphinx/log/searchd.pid
    preopen_indexes        = 1
    unlink_old            = 1
    mva_updates_pool    = 1M
    max_packet_size        = 8M
    max_filters            = 256
    max_filter_values    = 4096
    max_batch_queries    = 32
    workers                = threads 

    # windows下启动searchd服务一定要注释掉这个
   # seamless_rotate  = 1

    # 开启sphinx服务时,会生成几个log文件,这里配置文件生成目录。默认会生成在searchd.exe同级目录下
    binlog_path       = D:/sphinx/log/
}

定义一个启动sphinx的脚本“sphinx重启.bat”。脚本内容如下,双击启动

@echo off 

::停止sphinx服务
d:/sphinx/bin/searchd --stop

::建立配置文件中所有索引(也可以建立某个索引)
d:/sphinx/bin/indexer -c d:/sphinx/conf/newdefend.conf --all

::启动sphinx服务
d:/sphinx/bin/searchd -c d:/sphinx/conf/newdefend.conf

::窗口不要关闭
pause

启动成功界面

测试代码

$keyword = ‘‘;
$sphinx = new SphinxClient;
$sphinx->setServer("localhost", 9312);
$sphinx->setMatchMode(SPH_MATCH_ALL);   //匹配模式 ANY为关键词自动拆词,ALL为不拆词匹配(完全匹配)
$sphinx->SetArrayResult ( true );    //返回的结果集为数组
$result = $sphinx->query($keyword,"domain_suggest delta_domain_suggest");    //星号为所有索引源
$count=$result[‘total‘];        //查到的结果条数
$time=$result[‘time‘];            //耗时
$arr=$result[‘matches‘];        //结果集
$id=‘‘;
foreach($arr as $i => $val){
    $id.=$arr[$i][‘id‘].‘,‘;
}
$id=substr($id,0,-1);            //结果集的id字符串

echo $id;

运行结果

原文地址:https://www.cnblogs.com/qq917937712/p/8930833.html

时间: 2024-11-05 20:48:00

PHP搜索优化 sphinx 实战的相关文章

【记忆化搜索+优化】10411 - SKAKAVAC

[记忆化搜索+优化]10411 - SKAKAVAC Time Limit: 4000MS Memory Limit: 36000KB 给定一个N-N的矩形,每个格子有一个数字,某人最初在R行C列的位置,他可以按以下规则移动: 1.跳到相邻的行,但列数差要大于1的所有格子.跳到相邻的列,位行数差要大于1的所有格子.即如果当前位置是(r1,c1)要跳到(r2,c2)则它们满足: |r1-r2|=1且|c1-c2|>1或者|c1-c2|=1且|r1-r2|>1 2.目标格子的数字严格大于起跳格子的

注册域名与SEO搜索优化

注册域名应该考虑哪些对SEO和网站运营影响 域名是互联网公司和个人网站的无形资产之一,网站的内容.流量都有域名有关系. 一个好的域名对SEO搜索引擎优化和网站运营都有一定的影响. 1.域名的后缀 一般情况下都注册.com 因为这个基本被认为顶级的域名,应该也是最有价值的域名. 但对于一些区域性和特定性.cn..net也是不错的选择. 可以参考:<域名后缀-SEO搜索引擎优化 > 2.域名中的关键词 注册的域名其实首先要考虑到的就是简单,容易记.有时我们也在考虑域名中的关键 词,但作为中文来说拼

你的网站做好神马搜索优化了吗?神马搜索站长工具提交

神马搜索借助uc的优势,可直接在地址输入框中输入关键词就可以搜索了,免去了输网址的麻烦(这个在国外有点long duan的嫌疑).如果你的网站被bd等se收录了以后一般也是会被神马搜索收录的,查询方法也是用site:***.com.那么我们做好神马搜索优化呢? 既然神马搜索支持site指令,根据genfeng是思路,那它是不是也有站长工具平台呢?答案是有的,只不过得到这个结果稍微有点迂回.起初在网上搜索了相关问题都没找到,后面想想神马搜索是在uc上的,那在uc官网应该有一些提示.在uc社区的神马

针对TianvCms的搜索优化文章源码(无版权, 随便用)

介绍: 搜索优化虽然不是什么高深的技术, 真正实施起来却很繁琐, 后台集成搜索优化的文章可以便于便于管理, 也让新手更明白优化的步奏以及优化的日常. 特点: 根据自己的经验和查阅各种资料整理而成, 相对于文章列表. 对搜索优化做了更舒服的列表形式. 功能: 1. 清晰的优化思路, 可以按照既定步奏一步一脚印的实现各种能. 2. 内容全面,涵盖搜索优化所需要的处理的站内站外各种资料. 为什么要发布: 写了好多年程序, 得到不少的帮助, 也该回馈了. 只是看看:SEO 源码下载:https://gi

移动APP 中文输入法下的搜索优化

最近做了一个移动端的搜索功能,带有suggest.实现上并没有什么可说的,但是在后续优化上,特别是在中文输入法的情况下的优化使我学到一些新东西,所以决定写一篇文章. 下面是我简化后的基本功能实现,监听输入框的input事件,当搜索框有输入时,根据输入内容和后端进行交互提供suggest,再监听keyup的事件,当用户敲击回车的时候,就进行一次搜索.注意其中suggest和search是两个自定义事件,并非原生事件.我们在实际生产环境里应该给自定义事件加上特殊前缀. $('#searchInput

sql优化-项目实战

项目中sql优化是提高项目执行效率的有效方式之一.如果你是程序员,使用好的sql不仅使得项目执行效率的提升,更是一个人技术能力的体现:如果你是项目管理者,检查程序员的sql是否是一个优质的sql至关重要,那么sql到底如何优化呢? SQL优化方案: 1. sql中索引的使用技巧: (1) 对于多列索引(复合索引),sql查询条件只有使用了最左边的列,索引才会生效. (2) 对于like模糊查询,模糊匹配的字符串最前面禁止使用%._等模糊匹配器的字符,否则索引将失效,如果最前面必须要用到模糊匹配,

千万级流量的优化策略实战

摘要 性能优化涉及面很广.一般而言,性能优化指降低响应时间和提高系统吞吐量两个方面,但在流量高峰时候,性能问题往往会表现为服务可用性下降,所以性能优化也可以包括提高服务可用性.在某些情况下,降低响应时间.提高系统吞吐量和提高服务可用性三者相互矛盾,不可兼得.例如:增加缓存可以降低平均响应时间,但是处理线程数量会因为缓存过大而有所限制,从而降低系统吞吐量:为了提高服务可用性,对异常请求重复调用是一个常用的做法,但是这会提高响应时间并降低系统吞吐量. 对于很多像美团这样的公司,它们的系统会面临如下三

elasticsearch中文搜索优化

遇到的问题 检索葡萄糖关键字,希望结果仅包含葡萄糖,不包含葡萄:检索葡萄,希望结果包含葡萄糖. 同义词如何配置 如何确保搜索关键词被正确分词 分析器分词流程 分析器扮演着非常重要的角色,ES提供的有内置的分析器,社区也提供各种分析器插件(如中文的ik分析器).分析器由以下几个组件构成 字符过滤器 主要职责是在分词器前过滤字符流,在源字符流中添加.删除.替换字符.一个分析器中可以有0个或多个字符过滤器.主要包括:html char filter.mapping char filter等 分词器 主

bottle.py中的路由搜索优化

# Now search regexp routes # ROUTES_REGEXP是一个字典,键是请求方法,值是[路由, 处理函数]的列表 # 例如:{"GET", [[路由1, 处理函数1], [路由2, 处理函数2]]} routes = ROUTES_REGEXP.get(method,[]) for i in xrange(len(routes)): match = routes[i][0].match(url) if match: handler = routes[i][1