Sphinx实践

sphinx应用项目实践踩坑记 之前写的关于sphinx环境及使用的文章只是简单的做个小demo的测试,真正应用到项目中会遇到各种问题袭来,没有leader指导,只能自己摸索,应用到项目上线也是花了好几天的时间,这次记录只要是指出各个坑点,避免日后再踩坑。 环境搭建 docker 如何安装在这里就不详细说了,有了docker环境后使用 `docker search sunfjun/coreseek` ,笔者使用的doc... 阅读详情

 项目需要用到模糊搜索,数据量上千万级别的时候,用like性能很差(like以字符为单位,没有索引,需要扫描所有的记录),虽然mysql的MYISAM提供全文索引,但是性能却不敢让人恭维,毕竟数据库不是专业做搜索的,这些还是用程序做更加合适,所以就决定用sphinx来做mysql的全文索引工具。

       Sphinx 单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

安装

      这里使用api调用的方式,而不是使用sphinxSE(不用重新编译mysql),因为需要检索中文,所以这里使用了coreseek(Sphinx+LibMMSeg中文分词包),新版的coreseek将词典和sphinx源程序放在了一个包中,因此只需要下载coreseek包就可以了,下载地址http://www.coreseek.cn/

1、解压安装mmseg-3.2.14

     ./bootstrap #输出的warning信息可以忽略,如果出现error则需要解决
     ./configure --prefix=/usr/local/mmseg3
      make && make install

2、安装csft-3.2.14

      sh buildconf.sh #输出的warning信息可以忽略,如果出现error则需要解决
      ./configure --prefix=/usr/local/coreseek --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql    ##如果提示mysql问题,可以查看MySQL数据源安装说明
      make && make install

3、测试mmseg分词,coreseek搜索
      cd testpack
      cat var/test/test.xml #此时应该正确显示中文
      /usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc var/test/test.xml
      /usr/local/coreseek/bin/indexer -c etc/csft.conf --all //建立索引
      /usr/local/coreseek/bin/search -c etc/csft.conf 网络搜索  //查询

配置文件

   复制一份配置文件cp /usr/local/coreseek/etc/sphinx-min.conf.dist  /usr/local/coreseek/etc/sphinx.conf具体的可以下载附件查看

       详细的讲解可以查看这篇文章http://www.cnblogs.com/yjf512/p/3598332.html

        这里主要讲一下几个重点

1、source数据源

     source的名字可以自定义,但是需要与后面的index对应上

     type填mysql

     sql_query_pre=SET NAMES utf8 就是指定字符编码

     sql_query =就是mysql语句(任何出现在SQL语句中,既不是ID属性,也没有使用“sql_attr_类型”设置的字段,都是全文字段)第一列id需为整数

     sql_attr 这里有两个作用一个是查询的时候可以把attr属性字段的实际内容带出来,第二个是过滤条件的作用

2、index 索引

   source      = main_src            #索引数据源
   path        = /data/coreseek/var/brief_info_all_main #索引文件存放路径
   docinfo     = extern  #文档信息的存储模式,文档id 存放到spa文件中 文档的属性 存放到spd 文件中
   mlock       = 0  #缓冲内存锁定 searchd会讲spa和spi预读取到内存中。但是如果这部分内存数据长时间没有访问,则它会被交换到磁盘上
   morphology   = none #词形处理器
   min_word_len = 1 # 最小索引词长度,小于这个长度的词不会被索引。
   html_strip   = 0 # html标记清理,是否从输出全文数据中去除HTML标记。
   #中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
   charset_dictpath = /usr/local/mmseg/etc/ #中文分词使用的目录
   charset_type  = zh_cn.utf-8
   ngram_len     = 0 #必须设置,表示取消原有的一元字符切分模式,不使其对中文分词产生干扰

 客户端访问

       在api目录下有各种语言的客户端api访问,都是通过tcp连接到searchd服务,这里主要讲一下C++的方式访问

int main(){
	const char * query="庄进发";
    const char * index="brief_info_all_main";

	sphinx_client * client;
	client=sphinx_create ( SPH_TRUE );
	//设置访问searchd的ip和端口
	sphinx_set_server ( client, "localhost", 9312);
	//设置匹配模式 当作一个词来匹配
	sphinx_set_match_mode ( client, SPH_MATCH_ALL );
	//排列展示方式
	sphinx_set_sort_mode ( client, SPH_SORT_EXTENDED, "@weight desc @id desc" );
	//设置结果limit 最大的还要修改search 配置文件
	sphinx_set_limits(client,(uipageIndex-1)*uipageLimit,uipageLimit,10000,0);

	//清理filter
	sphinx_reset_filters(client);
	//过滤属性
	sphinx_int64_t values={1002};
        sphinx_add_filter(client,"product",1,&values,SPH_FALSE);
	//设置时间过滤器
	sphinx_add_filter_range(client,"enter_time",uiStartTime,uiEndTime,SPH_FALSE);
       //查询
	sphinx_result * res = sphinx_query ( client, query, index, NULL);

        printf ( "Query '%s' retrieved %d of %d matches in %d.%03d sec.\n",query, res->total, res->total_found, res->time_msec/1000, res->time_msec%1000 );

         //结果是二维数组 放到一个二维表里面
	 for (uint32_t i=0; i<res->num_matches; i++ ){
	      Json::Value jRow;
		for ( uint32_t j=0; j<res->num_attrs; j++ )
		{
		    if( res->attr_types[j]==SPH_ATTR_STRING){
			 printf ( "%s", sphinx_get_string ( res, i, j ) );
		    }else{
		         printf ( "%u", (unsigned int)sphinx_get_int ( res, i, j ) );
		    }	
		}
		printf ( "\n" );
	}
}

 技巧补充:

1、如果过滤的字段里面包含字符串怎么办?比如创建人的rtx名字?

       Sphinx里面的sphinx_add_filter不支持字符串,楼主使用的crc32,将字符串转换为整形再过滤
2、对新增的数据怎么处理?

        重建索引的时间成本很高,这里利用主索引+增量索引的方式来实现,主索引每天更新一次,增量索引每5分钟更新,然后利用merge 来合并索引
        /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx_brief_all.conf --merge                 brief_info_all_main brief_info_all_delta --rotate
 3、匹配中文不准确怎办?因为建立索引是根据mmsg分词,如果默认的词库不满足,可以动态添加词库参考文章https://www.mawenbao.com/note/mmseg-custom-dict.html
       可以去搜狗下载词库http://pinyin.sogou.com/dict/

       //将sougou词库解析成mmsg的文本格式

        ./extract-sougou-dict.py leader.scel -o sougou-dict.txt -mmseg
        //合并词库 
        ./merge-mmseg-dict.py -a unigram.txt -b sougou-dict.txt -o merged.txt
         mv unigram.txt.uni uni.lib

         //生成词库

         mv merged.txt /usr/local/mmseg3/etc/unigram.txt

          /usr/local/mmseg3/bin/mmseg -u /usr/local/mmseg3/etc/unigram.txt

          //覆盖原来的lib

          cd /usr/local/mmseg3/etc

          mv unigram.txt.uni uni.lib

CMU Sphinx: 开源语音识别引擎 通过使用 CMU Sphinx,开发者可以构建自己的语音识别应用程序,并根据具体需求进行定制和扩展。本文介绍了 CMU Sphinx 的特点和用法,并提供了一些示例源代码,帮助读者入门使用 CMU Sphinx 进行语音识别。CMU Sphinx 是一款开源的语音识别引擎,它提供了一系列工具和库,用于构建自己的语音识别应用程序。创建语音识别模型:使用 CMU Sphinx 提供的工具,可以创建自定义的语音识别模型。其中,最常用的工具是 SphinxTrain,它可以用于训练和优化语音识别模型。 阅读详情

相关推荐

Sphinx 全文检索实践指南 - 介绍.pdf

51CTO技术沙龙第19期讲义:Sphinx 全文检索实践指南主讲:李沫南部分主要内容:全文检索 VS 数据库检索SELECT * FROM documents WHERE title like '%test%'CPU 100%'30秒内只能进行一次查询'没有找到记录...如何解决?为了提升数据库的性能,在某些字段上建索引答案:在全文字段上加索引 本资料共包含以下附件: Sphinx 全文检索实践指南 - 介绍.pdf

CMUS狮身人面像(一)-开发人员教程

CMUSphinx是一款开源的语音识别工具包,由CMU(卡内基梅隆大学)开发,基于Sphinx语音识别引擎。它提供了一种高效的语音识别解决方案,适用于多种语言和领域的应用。CMUSphinx具有良好的跨平台性,可在Windows、Linux、MacOS等多种操作系统上运行。在当今高度技术化的时代,语音识别技术已经成为人工智能领域的一项关键技术。其中,开源语音识别工具包CMUSphinx在这个领域内发挥着重要的作用。本文将重点突出CMUSphinx中的重点词汇或短语,介绍其基本概念、应用场景以及优势。

jasonhongcn的专栏 544

【论文阅读】AU检测|《Deep Adaptive Attention for Joint Facial Action Unit Detection and Face Alignment》

摘要 本文旨在从大量没有人工标注的视频中学习用于面部动作单元检测的区分表示。受面部动作是面部肌肉运动这一事实的启发,论文将这些运动描述为不同帧中两幅面部图像之间的转换,并将其用作学习表示的自我监控信号。但是,在不受控制的情况下,这种转换是由面部动作和头部运动引起的。为了消除头部运动的影响,我们提出了一个双圈自动编码器(TCAE),它可以解开面部动作相关运动和头部运动相关运动。具体而言,TCAE被训练成分别将源面部的面部动作和头部姿态改变为目标面部的面部动作和头部姿态。我们的实验验证了TCAE解耦运动的能力。

Celine的博客 4554

Sphinx 学习优质教程

3.3. 4. 5.

hello! 674

手持式激光测距仪全套方案

激光测距全套方案,包括原理图、源代码、PCB、BOM、光学部分资料,结构、特殊元件数据手册及供应商联系方式,提供调试技术文档。全套方案已成功打板验证,实现0.05~50m测量范围,精度在+/—1.5mm,激光波长635~650nm,功率《1mW。方案预留了TTL串口、RS485接口,可通过串口助手看到测量数据,可自行DIY或者商业开发。无论是电路小白,还是技术大拿,都能通过方案资料成功做出一套激光测距仪。

Laser01的博客 2055

论文解读--Phase Noise in FMCW Radar Systems

相位噪声是现代雷达、通信、光谱和计量系统的基本性能参数之一。本文提出了一种适用于FMCW雷达系统的相位噪声理论。导出了一个新的设计方程,用于确定雷达系统中允许的源相位噪声电平的最大界。分析了在传输延迟小于参考振荡器相干时间时,相干混频引起的非线性相位噪声去相关函数;讨论了在传输延迟大于参考振荡器相干时间时,目标响应的频谱展宽。提出了收发链中各子系统的影响,并讨论了一种新的ADC相位噪声模型。介绍了相位噪声建模技术,然后将锁相环频率合成器与低噪声频率合成器进行比较,以演示减少相位噪声边带以改善检测和跟踪性能。

奔袭的算法工程师 3767

为CMUSphinx训练声学模型教程手册

CMUSphinx训练声学模型手册 介绍 1.什么时候需要训练 2.当你不需要训练时 数据准备 1.编译所需的包 2.设置培训脚本 3.设置数据库音频的格式 4. 配置文件路径 5.配置模型类型和模型参数 6.配置声音功能参数 7.配置并行作业以加速培训 8.配置解码参数 训练 1.培训内部 2.转型矩阵培训(高级) 3.MMIE培训(高级) 测试 1.使用该模型 2.故障排除 介绍 CMUSph...

Anadahoji的博客 2100

Snort源代码编译 _ 采坑之旅(for Windows VS2015)

    系统环境:Windows7 sp1 x64     编译环境:VS2015 SP1     Snort版本:2.9.12     daq版本:2.0.6     Snort官网:https://www.snort.org/downloads#snort-downloads 背景     最近需要实现一个类似网络防火墙的产品,主要参考Snort源码,先花了点时间简单读了下网上比较流行的《...

magictong的专栏 8888

语音识别系统CMUsphinx环境安装

安装语音识别系统主要是为了在tutrlebot上应用, 所以先安装ROS: 教程: http://www.cnblogs.com/qixianyu/p/6590917.html           http://www.cnblogs.com/liu-fa/p/5779206.html

qq_25925185的博客 1939

Stm32L0 STM32CUBE中UART和使用LPUART1以及串口不进中断问题解决

/* 开启串口1中断 */ LL_USART_EnableIT_RXNE(LPUART1); /* 开启串口2中断 */ LL_USART_EnableIT_RXNE(USART2);

シ❤゛甜虾的个人博客 7687

【如何学习CAN总线测试】——Python+Robot Framework框架实现UDS诊断自动化

由于项目需要进行UDS诊断测试,所以对这方面进行了研究学习,网上很少能查询到相关资料,故记录一下UDS自动化测试开发过程,由于保密原则,案例都是Demo,希望能帮到感兴趣的朋友。

测试领域技术分享 7467

sphinx实践

  安装参考地址:http://briansnelson.com/How_to_install_Sphinx_on_Centos_Server   yum install sphinx 如果失败的话使用下面的方式安装 wget http://sphinxsearch.com/files/sphinx-2.2.9-1.rhel6.x86_64.rpm yum localinstall ...

dcj3sjt126com的专栏 585

银河麒麟桌面系统批量交付:封装自动化ISO镜像,百台装机效率提升10倍

麒麟桌面系统自动化ISO镜像定制摘要 本文详细介绍麒麟桌面版ISO安装镜像的定制方法,通过修改系统文件实现自动化安装部署。主要内容包括:1) 挂载原版ISO并提取文件;2) 使用unsquashfs解压系统文件进行定制化修改,包括添加系统标记配置;3) 配置ky-installer.cfg自动应答文件,设置安装参数如用户名、密码、分区方案等;4) 修改grub引导配置启用自动安装模式。该流程支持磁盘加密、自定义分区、自动登录等功能,生成的定制镜像可满足批量部署需求,显著提升系统安装效率。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 1508

Apache TVM 文档写作指南:基于 Divio 体系的四类文档组织与 Sphinx 构建实践

Apache TVM 是一个面向 CPU、GPU 与专用加速器的开源深度学习编译器栈,其官方文档体系庞大且分层清晰。本文以仓库中的 [docs/contribute/document.rst](https://link.gitcode.com/i/2dddd52b55aa6f8abbf67d6dfe07530b) 为核心骨架,系统讲解 TVM 文档的组织方式(入门教程、操作指南、参考、架构指南四类

gitblog_01102的博客 1044

【电源专题】Type-C母座外壳直接接主板GND还是接RC呢?别再纠结了!

Type-C屏蔽壳接地这件事,没有唯一标准答案。符合规范、贴合产品、能过认证,就是最优解。希望这篇文章能帮你理清思路。

一点硬件 601

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Python文档工具Sphinx的实践指南

文档生成是软件开发中不可或缺的一环,Python生态中的Sphinx工具因其专业性和扩展性成为技术文档的首选解决方案。Sphinx基于reStructuredText标记语言,支持自动生成交叉引用、代码高亮等特性,大幅提升文档维护效率。通过autodoc扩展,开发者可以直接从代码docstring生成API文档,实现代码与文档的同步更新。在工程实践中,Sphinx支持多格式输出、主题定制和自动化部署,适用于从开源项目到企业级应用的各种场景。结合CI/CD流程,可以构建包含链接检查、拼写校验和文档测试的完整质

weixin_28840143的博客 101

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Astropy 文档编写与构建指南:reStructuredText 规范、Sphinx 扩展体系与本地构建实践

本文基于 Astropy 仓库中的 [文档指南](https://link.gitcode.com/i/5ad8ee8d918f4b3f2cc5c40a5ffbc73d) 展开,系统介绍 Astropy 文档体系的两层结构(API 文档 + 叙述文档)、numpydoc/intersphinx 交叉引用规范,以及如何用 `tox -e build_docs` 或 `make html` 从源码构建

gitblog_00914的博客 418

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ROS包文档化实践:从Sphinx到Read the Docs的完整指南

在软件开发中,文档是连接代码与开发者的桥梁,尤其在机器人操作系统(ROS)这类复杂生态中,其价值更为凸显。文档化不仅涉及代码注释和API说明,更是一套完整的工程实践体系,旨在提升代码的可维护性、降低使用门槛。其核心原理在于通过结构化信息传递,将设计意图、使用方法和最佳实践固化下来,形成可复用的知识资产。从技术价值看,完善的文档能显著减少团队协作的沟通成本,加速新成员上手,并作为项目的“记忆体”保障长期发展。在应用场景上,无论是开源项目传播、社区协作,还是企业内部的知识沉淀,文档都发挥着基础设施般的作用。本文

weixin_28745821的博客 255

文档搜索优化:Elasticsearch与Sphinx结合的Pyodide实践指南

你是否曾在Pyodide文档中迷失方向?随着项目规模扩大,标准Sphinx搜索已难以满足开发者对高效内容检索的需求。本文将展示如何通过Elasticsearch与Sphinx的深度整合,构建毫秒级响应的智能文档搜索系统,让你轻松找到Pyodide的每一个功能点。 ## Sphinx文档基础架构 Pyodide使用Sphinx作为文档生成工具,其核心配置位于[docs/conf.py](http...

gitblog_00283的博客 1031

Sphinx最佳实践

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34217711的博客 138

sphinxql php,Sphinx最佳实践

本文介绍了几种Sphinx搜索引擎使用方式,几种方式各有特点,分别适用于不同场景,这里主要介绍SphinxSE的使用方式。Sphinx一般有多种种连接方式,一种是SphinxAPI,再就是SphinxQL,当然还有SphinxSESphinxAPI:一系列searchd 的客户端API 库,用于流行的Web脚本开发语言(PHP, Python, Perl, Ruby, Java),使用简单,不多言...

weixin_36115763的博客 310

为 Apache TVM 编写高质量技术文档:从文档分类体系到 Sphinx 工程实践的完整指南

Apache TVM 是一个开源机器学习编译器框架,其在线文档(本仓库 [docs](https://link.gitcode.com/i/c17dac2d76ae719757cffbbd74f8335d) 目录)覆盖从入门到架构设计的全部内容。本文以 [docs/contribute/document.rst](https://link.gitcode.com/i/699d6b18b693e2b

gitblog_00105的博客 612

Gel 项目文档贡献指南:从 reStructuredText 语法到 Sphinx 构建的完整实践

本篇技术指南以 Gel(原 EdgeDB)开源仓库中的官方文档贡献指南为主体,系统讲解如何为 Gel 项目编写与维护技术文档:从贡献前的改动取舍准则、写作风格规范,到 Sphinx + reStructuredText 的排版语法、EdgeQL 语言参考文档的编写方式(函数、操作符、语句、类型、关键字),再到文档的本地构建、测试、替换标记与版本控制机制。读完本文,你将掌握一套可直接复用的、面向 G

gitblog_00280的博客 286

Sphinx AutoAPI 使用教程

Sphinx AutoAPI 使用教程 项目介绍 Sphinx AutoAPI 是一个用于生成完整 API 文档的 Sphinx 扩展。与传统的 Sphinx autodoc 不同,AutoAPI 不需要加载、运行或导入正在记录的项目,而是通过解析源代码来生成文档。这使得文档生成过程更加自动化,减少了手动编写文档的工作量。 项目快速启动 安装 首先,通过 pip 安装 Sphinx AutoAPI...

gitblog_00048的博客 518

Sphinx-Design 使用教程

Sphinx-Design 使用教程 项目介绍 Sphinx-Design 是一个用于设计美观、屏幕尺寸响应式网页组件的 Sphinx 扩展。它受到 Bootstrap (v5)、Material Design 和 Material-UI 设计框架的启发,旨在为 Sphinx 文档提供丰富的 UI 组件。 项目快速启动 安装 首先,通过 pip 安装 sphinx-design 扩展: pip i...

gitblog_00084的博客 1035

Django-Sphinx 使用教程

Django-Sphinx 使用教程 项目介绍 Django-Sphinx 是一个用于将 Sphinx 文档集成到 Django 网站中的开源项目。Sphinx 是一个强大的文档生成工具,广泛用于生成 Python 项目的文档。Django-Sphinx 通过提供一个 Django 应用,使得开发者可以轻松地将 Sphinx 生成的文档嵌入到他们的 Django 项目中。 项目快速启动 安装 Dj...

gitblog_00718的博客 1018
上一篇: nginx+lua搭建文件上传下载服务
下一篇: 缓存和数据库的最终一致性方案
ExtraMan
博客等级 码龄14年 9粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值