1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
//sphinx配置文件 //属性 并不会被全文索引 用于实现mysql的一些where、order by等功能 sql_query = select *, \ id,create_time from test sql_attr_uint = id sql_attr_timestamp = create_time //php代码 //只搜索id为1,2,3的内容 第三个参数如果传true则为搜索除了id为1,2,3的内容 $sphinx->SetFilter('id', array(1,2,3)); //排序 $sphinx->SetSortMode(SPH_SORT_ATTR_DESC, 'create_time'); //范围搜索 数据量较大时可以配置 假设该表有2700条数据 sql_query_range = select min(id),max(id) from test sql_range_step = 1000 sql_query = select * from test where id >=$start and id<=$end //此时对表进行$sphinx->query()将会分3次查询 //匹配模式 SPH_MATCH_ALL //完全匹配关键词(默认模式) SPH_MATCH_ANY //匹配关键词中任意一个(使用较多) SPH_MATCH_PHRASE //将整个查询看作一个词组,要求按顺序完整匹配(使用较少) SPH_MATCH_FULLSCAN //当满足一下条件时,SPH_MATCH_FULLSCAN会代替指定模式被激活 1.关键词为空 2.docinfo存储方式为extern 3.必须至少有一个属性(SetFilter()) (查找全部) SPH_MATCH_BOOLEAN //(通常内部需求才会使用)使用方法详见官网配置,ctrl+f 布尔查询语法 SPH_MATCH_EXTENDED2 //(通常内部需求才会使用)使用方法详见官网配置,ctrl+f 扩展查询语法 //排序模式 SPH_SORT_RELEVANCE //按相关度降序排列(最好的匹配排在最前面) SPH_SORT_ATTR_DESC //按属性降序排列 (属性值越大的越是排在前面) SPH_SORT_ATTR_ASC //按属性升序排列(属性值越小的越是排在前面) SPH_SORT_TIME_SEGMENTS //先按时间段(最近一小时/天/周/月)降序,再按相关度降序 SPH_SORT_EXTENDED //按一种类似SQL的方式将列组合起来,升序或降序排列。 SPH_SORT_EXPR //按某个算术表达式排序。 //结果分组(聚类) 可以用API调用SetGroupBy()来开启 分组跟配置sphinx的内存有关 如果内存大小不够放下整个分组数据,可以结果会有偏差 SPH_GROUPBY_DAY //从时间戳中按YYYYMMDD格式抽取年、月、日 SPH_GROUPBY_WEEK //从时间戳中按YYYYNNN格式抽取年份和指定周数(自年初计起)的第一天 SPH_GROUPBY_MONTH //从时间戳中按YYYYMM格式抽取月份 SPH_GROUPBY_YEAR //从时间戳中按YYYY格式抽取年份 SPH_GROUPBY_ATTR //使用属性值自身进行分组 //分布式搜索 需要在索引中配置type=distributed //其关键思想是对数据进行水平分区(HP,Horizontally partition),然后并行处理。 //在不同服务器上设置Sphinx程序集(indexer和searchd)的多个实例 //让这些实例对数据的不同部分做索引(并检索) //在searchd的一些实例上配置一个特殊的分布式索引 //然后对这个索引进行查询 //这个特殊索引只包括对其他本地或远程索引的引用,因此不能对它执行重新建立索引的操作,相反,如果要对这个特殊索引进行重建,要重建的是那些被这个索引被引用到的索引。 //当searchd收到一个对分布式索引的查询时,它做如下操作 //1.连接到远程代理; //2.执行查询; //3.(在远程代理执行搜索的同时)对本地索引进行查询; //4.接收来自远程代理的搜索结果; //5.将所有结果合并,删除重复项; //6.将合并后的结果返回给客户端. //任一个searchd实例可以同时做为主控端(master,对搜索结果做聚合)和从属端(只做本地搜索)。这有如下几点好处: //集群中的每台机器都可以做为主控端来搜索整个集群,搜索请求可以在主控端之间获得负载平衡,相当于实现了一种HA(high availability,高可用性),可以应对某个节点失效的情况。 //如果在单台多CPU或多核机器上使用,一个做为代理对本机进行搜索的searchd实例就可以利用到全部的CPU或者核。 //批量查询 //AddQuery()并不修改当前状态。已有的全部排序、过滤和分组设置都不会因这个调用而发生改变。除非你先调用ResetFilters()、ResetGroupBy()来清除过滤或分组规则。 $cl->SetSortMode ( SPH_SORT_RELEVANCE ); $cl->AddQuery ( "hello world", "documents" ); $cl->SetSortMode ( SPH_SORT_ATTR_DESC, "price" ); $cl->AddQuery ( "ipod", "products" ); $cl->AddQuery ( "harry potter", "books" ); $results = $cl->RunQueries(); |
官网配置地址:
http://www.coreseek.cn/docs/coreseek_4.1-sphinx_2.0.1-beta.html#live-updates