Sphinx配置文件分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sphinx配置文件分析相关的知识,希望对你有一定的参考价值。
#在Sphinx配置文件中,主要包括五个部分:source部分、index部分、searchd部分、indexer部分和common部分(前四部分比较重要);
#source是数据源,index负责定义索引,searchd负责定义searchd守护进程的相关选项,indexer负责定义生成索引的过程中索引的功能性限制;
#在数据源source中,type指定数据库的类型,目前Sphinx只支持两种类型的数据库,一种是mysql;
#sql_host指定主机,sql_user和sql_pass对应数据库的账号密码,sql_db指定数据表,sql_port指定通信的端口;
#sql_query_pre指定在所有的数据库操作之前需要进行的环境设置,例如指定utf-8和缓存属性;
#sql_query指定数据库查询语句,这个地方一般不指定where和order by、group by等选项,这些事情一般交给Sphinx去过滤,不过对于分布式查询可能会有所区别;
#关于sql_field_string、sql_ranged_throttle会在后面介绍;
#sql_attr_uint用来设置数据项为无符号整型,如有其它类似属性可做类比理解;
#sql_query_info是sql_query的调试版本,因为设计的问题在运行的状态中经常有问题,注释掉不使用;
#在索引index中,source指定数据源,path指定数据源的绝对地址,docinfo定义文档信息的存储模式,extern表示文档信息和文档id分开存放,mlock设置已缓存数据的内存锁定,为0的时候不锁定;
#morphology用于设置词形处理器,这个在后面会有详细介绍;
#min_word_len字面意思就能理解,对于中文来说,设置成1比较合适;
#charset_type用来设置数据编码(指定为utf-8);
#chinese_dictionary用来指定中文词典的绝对地址;
#min_prefix_len和min_index_len用来指定最小前缀和最小后缀,这个在后面有详细介绍;
#html_strip用来指定是否自动去掉所有html标签;
#enable_star
#preopen指定预先打开索引还是每次使用索引的时候打开,由于Sphinx的索引是滚动实现的,所以一定意义上这两者会产生冲突;
#disc=keywords
#在配置分布式索引的时候,需要指定type=distributed,同时在多个local中指定索引源;
#在indexer中,主要设置mem_limit,这个指定索引过程中的内存使用限制,默认为32M;
#其他的可设置项有max_iops,这个指定每秒最大的I/O次数,默认为0,无限制;
# max_iosize指定最大I/O大小,指定I/O流最大字节大小,默认为0,无限制;
此外还有write_buffer、max_xmlpipe2_field、max_file_field_buffer等设置;
#在searchd中,listen用来定义searchd守护进程监听的端口和IP;
#log指定searchd进程的运行日志地址;
#query_log指定搜索日志的位置;
#read_timeout指定读操作请求超时时间;
#clien_timeout指定单次会话中,两次查询之间最长等待时间;
#max_childrent指定子进程的最大数量;
#persistent_connections_limit指定持续连接限制;
#pid_file指定是进程ID文件的路径;
#max_matches指定查询的最大结果返回数,类似于SQL语句查询里面的limit;
#seamless_rotate指定是否需要无缝切换,是的话指定为1,做增量索引需要这种模式;
#preopen_indexs指定后台运行是是否预先打开所有的索引,是的话指定1;
#unlink_old指定是否释放旧索引,默认为1;
#mva_updates_pool 指定MVA更新池的大小,默认1M;
#max_packet_size 指定最大允许网络包大小,默认8M;
# max_filters指定每个查询允许最多的过滤器个数;
#max_batch_queries指定每个组最大的查询数;
#此外还包括一些关于线程的设置;
#关于common;
#配置项morphology:
#词形处理器,举个栗子,在英文中,cats是cat的复数,所以两个单词实际上指向同一个事物,所以词形处理器会把两个单词当做一个单词来处理;
#可能存在的问题,举个栗子,如果把gps当做gp来处理,自然是荒谬的;
#配置项:sql_query_pre=SET SESSION query_cache_type=OFF:
#这个配置项主要为了设置缓存类型;
#query cache_type包括三个选项,0、1、2;
#0对应于上面的OFF;
#1对应于上面的ON;
#2对应于上面的DEMAND;
#MySQL默认的为1,也就是默认开启缓存,除非在查询语句中指定sql_no_cache。但这个时候即使指定了sql_no_cache也会在缓存中查询,因为sql_no_cache只是不更新缓存,不代表不会使用过去的缓存;
#当指定为2的时候,只有当通过query_cache指定缓存项时才会缓存;
#当指定为0的时候,会关闭缓存;
#配置项sql_field_string:
#这个项目一般指定一个在sql_query中的SQL指定的语句中select的一个数据属性;
#这个数据属性增加了索引;
#所以配置项决定了这个数据属性可以全文搜索,并且返回详细信息,非常关键;
#配置项sql_attr_string:
#这个配置项和sql_field_string的差别是这个数据属性不具备索引;
#配置项sql_ranged_throttle:
#这个配置项可以和配置项sql_range_step放在一起去理解(注意,没有d);
#这两个数据项实际上是决定分时搜索的;
#在大数据搜索的时候,我们倾向于把一个很长的表分为多个部分去进行查询;
#举个例子,假如说有八十万条数据,我们每次查找十万条,然后把所有的查询结构取并集,就会得到最终的结果集;
#这个里面,每次查询十万条,由sql_range_step指定,而上个例子中八次查询的两次查询之间的时间间隔,就是由sql_ranged_throttle确定的;
#为什么要进行分区查询呢?这是因为数据库可能会进行更新,这个时候可能需要锁表等操作;
#问题:数据库更新的时候需要暂停查找吗?和分布式查询相比,这种解决方案是不是效果不好?
#配置项charset_table:
#这个配置项是sphinx支持东亚语言搜索的关键配置项之一;
#东亚语言指的是汉语、日语、朝鲜语,这些语言的特点是词汇之间没有语法标志(对比与英文的空格),所以分词系统也是这些语言查询的特殊之处和关键技术;
#在配置这个属性的时候应该添加http://sphinxsearch.com/wiki/doku.php?id=charset_tables这个页面里面对应的全部字段;
#这个配置项是转换字符表,在上面链接里复制东亚语言专用的字符转换表的时候记得修改一些字符,比如箭头要改成->,这个网上介绍比较多;
#因为这个配置项的内容过多,为了保障页面简洁推荐写成多行;
#使用中文词典这一项不应该添加;
#配置项min_prefix_len:
#这个项目对应MySQL一个叫作索引前缀的功能,当然还有索引中缀和索引后缀的概念,原理相同,这里只介绍索引前缀;
#所谓索引前缀,我个人认为在英文中用处更大,在汉语中意义不大;
#前缀索引,大概是只对数据的前几个字符进行索引;
#在英文中,一个单词通过查询前几个字母就能区分开,在我们使用电子词典的时候,输入三四个字母一般都能匹配到含义相同的词汇(差别可能只是词性);
#在汉语中,一个词汇最少只有一个字,两个字居多,最长四个字就差不多,而这种情况下使用索引前缀就没有太大意义;
#同时,对于地址项,使用索引前缀也没有意义,因为很多地址的区分是后面的内容,想对而言,邮箱地址可能适合索引前缀;
#究竟是否要使用索引前缀,这个要具体问题具体分析;
#言归正传,关于min_prefix_len,指定的是一种原理类似的索引方案;
#例如这个配置项指定为3的时候,lovely就会生成lov、love、lovel、lovely对应的索引项;
#配置项ngram_len:
#在启动中文分词的前提下,这个配置项的意义不大;
#这个数据项目前只支持0和1;
#在建立索引的时候,如果这个配置项被设置为为1,那么每个会在字与字之间间隔开,以此为基础创建索引;
#另外,这个配置项只会对ngram_chars中包含的字符进行这样的分割,其他的没有限制;
#加粗指的是可能需要验证或者修改;
以上是关于Sphinx配置文件分析的主要内容,如果未能解决你的问题,请参考以下文章