针对Sphinx搜索客户端开发库的绑定. Sphinx是一个独立的搜索引擎系统,其目的是为其他相关程序和应用提供快速的、规模可扩展的全文搜索功能. Sphinx有着良好的设计,可以很方便的与SQL数据库结合,并使用脚本语言调用.
安装
客户端:http://sphinxsearch.com/
扩展地址:https://pecl.php.net/package/sphinx
SphinxClient类
为Sphinx提供了面向对象的接口
创建对象
//创建一个新的SphinxClient对象
SphinxClient::__construct()
连接
//建立到搜索服务端的持久连接
SphinxClient::open():bool
//关闭先前打开的持久连接
SphinxClient::close():bool
执行查询
//连接到searchd服务器,根据服务器的当前设置执行给定的查询,取得并返回结果集.
SphinxClient::query(string $query , string $index = "*" , string $comment = ""):array
query 查询字符串.
index 索引名称 (可以为多个,使用逗号分割,或者为“*”表示全部索引).
comment 发送到searchd的查询日志的注释内容
//连接到searchd,请求它从给定的文档生成摘录(摘要),然后返回结果
SphinxClient::buildExcerpts(array $docs , string $index , string $words , array $opts = ?):array|false
docs 包含文档内容的字符串数组。
index 索引名称。
words 要突出显示的关键字
opts 其他突出显示选项的关联数组
' before_match' 在关键字匹配项之前插入的字符串。默认值为' <b>'。
' after_match' 关键字匹配后要插入的字符串。默认值为' </ b>'。
' chunk_separator' 在摘要块(段落)之间插入的字符串。默认值为' ...'。
'限制' 片段的最大大小,以符号(代码点)为单位。整数,默认值为256。
'大约' 每个匹配的关键字块周围要选择多少个单词。整数,默认值为5。
'准确的短语' 是否仅突出显示精确的查询短语匹配而不是单个关键字。布尔值,默认为false。
'单程' 是否仅提取单个最佳段落。布尔值,默认为false
批处理
//将具有当前设置的查询添加到多查询批处理中。此方法不会以任何方式影响当前设置(排序,过滤,分组等)
SphinxClient::addQuery(string $query , string $index = "*" , string $comment = ""):int
query 请求参数。
index 索引名称(或多个名称)
//连接到searchd,运行使用SphinxClient::addQuery添加的所有查询的批处理,获取并返回结果集
SphinxClient::runQueries():array
关键字
//从query给定的令牌生成器设置中提取关键字index,还可以选择每个关键字的出现统计信息
SphinxClient::buildKeywords(string $query , string $index , bool $hits):array
query 从中提取关键字的查询。
index 用于从中获取标记化设置和关键字出现统计信息的索引。
hits 一个布尔标志,用于启用/禁用关键字统计信息生成
转义
//转义查询语言解析器将其视为特殊运算符的字符
SphinxClient::escapeString(string $string):string
错误
//返回带有最后一条错误消息的字符串。如果在上一个API调用期间没有错误,则返回空字符串。
SphinxClient::getLastError():string
//返回最后的警告消息。如果在上一个API调用期间没有警告,则返回空字符串。
SphinxClient::getLastWarning():string
设置
//设置搜索连接的连接超时(以秒为单位)
SphinxClient::setConnectTimeout(float $timeout):bool
//设置字段权重,按名称绑定每个字段权重,权重必须为正的32位整数,因此请注意不要达到32位整数的最大值。最终权重也是32位整数。默认权重值为1
SphinxClient::setFieldWeights(array $weights):bool
weights 字段名称和字段权重的关联数组
//控制搜索结果集的返回格式(匹配项按数组返回还是按hash返回)
SphinxClient::setArrayResult(bool $array_result = false):bool
array_result 如果 array_result 设置为 false, 匹配项以PHP hash格式返回,文档ID为键,其他信息(权重、属性)为值。如果 array_result 设置为 true, 匹配项以普通数组返回,包括匹配项的全部信息(含文档ID)
//设置全文查询的匹配模式. mode 是以下列出的常量之一.
SphinxClient::setMatchMode(int $mode):bool
SPH_MATCH_ALL 匹配所有查询词(默认模式).
SPH_MATCH_ANY 匹配查询词中的任意一个.
SPH_MATCH_PHRASE 将整个查询看作一个词组,要求按顺序完整匹配.
SPH_MATCH_BOOLEAN 将查询看作一个布尔表达式.
SPH_MATCH_EXTENDED 将查询看作一个Sphinx内部查询语言的表达式.
SPH_MATCH_FULLSCAN 使用完全扫描,忽略查询词汇.
SPH_MATCH_EXTENDED2 类似 SPH_MATCH_EXTENDED ,并支持评分和权重.
//设置最大搜索查询时间
SphinxClient::setMaxQueryTime(int $qtime):bool
qtime 最长查询时间(以毫秒为单位)。它必须是一个非负整数。默认值为0,即无限制
//设置临时的(每个查询)每个文档属性值覆盖。覆盖功能使您可以“临时”更新单个查询中某些文档的属性值,而不会影响所有其他查询。
SphinxClient::setOverride(string $attribute , int $type , array $values):bool
attribute 属性名称。
type 属性类型。仅支持标量属性。
values 属性值数组,用于将文档ID映射到覆盖的属性值
//设置排名模式。仅在SPH_MATCH_EXTENDED2匹配模式下可用
SphinxClient::setRankingMode(int $ranker):bool
ranker 排名模式
SPH_RANK_PROXIMITY_BM25 默认排名模式,同时使用接近度和BM25排名。
SPH_RANK_BM25 仅使用BM25排名的统计排名模式(类似于大多数其他全文引擎)。此模式速度更快,但是对于包含多个1个关键字的查询,可能会导致质量下降。
SPH_RANK_NONE 禁用排名。此模式是最快的。从本质上讲,它等效于布尔搜索,将权重1分配给所有匹配项
//设置分布式重试计数和延迟,如果出现暂时性故障,searchd将尝试 count按每个座席重试。 delay是两次重试之间的延迟(以毫秒为单位)。默认情况下,重试是禁用的。请注意,此调用不会使API自身在出现临时故障时重试;它只会告诉searchd这样做。
SphinxClient::setRetries(int $count , int $delay = 0):bool
count 重试次数。
delay 重试之间的延迟(以毫秒为单位)
//设置select子句,列出要提取的特定属性,以及要计算和提取的表达式
SphinxClient::setSelect(string $clause):bool
clause 类似SQL的子句
//设置searchd的主机名和TCP端口。此后的所有请求都使用新的主机和端口设置。默认的主机和端口分别是“localhost”和3312.
SphinxClient::setServer(string $server , int $port):bool
server IP 或者主机名.
port 端口.
//设置匹配的排序模式
SphinxClient::setSortMode(int $mode , string $sortby = ?):bool
mode 排序模式
SPH_SORT_RELEVANCE 按相关性从高到低排序(最佳匹配排在最前面)。
SPH_SORT_ATTR_DESC 按属性降序排序(首先是较大的属性值)。
SPH_SORT_ATTR_ASC 按属性升序排序(首先是较小的属性值)。
SPH_SORT_TIME_SEGMENTS 按时间段(最后一小时/天/周/月)按降序排序,然后按相关性降序排序。
SPH_SORT_EXTENDED 按ASC / DESC顺序的类似SQL的列组合排序。
SPH_SORT_EXPR 按算术表达式排序
//设置可接受的文档ID范围。默认范围是0到0,即无限制。仅文档ID在min和之间的那些记录 max (包括完全等于min或的 ID max)将被匹配。
SphinxClient::setIDRange(int $min , int $max):bool
min 最小ID值。
max 最大ID值
//设置每个索引的权重,并启用跨不同索引的匹配权重的加权求和
SphinxClient::setIndexWeights(array $weights):bool
weights 将字符串索引名称映射到整数权重的关联数组。默认为空数组,即禁用加权求和
//给服务器端结果集设置一个偏移量 offset 从那个偏移量起向客户端返回的匹配项数目限制(limit) . 并且可以在服务器端设定当前查询的结果集大小 (max_matches) ,另有一个阈值 (cutoff),当找到的匹配项达到这个阀值时就停止搜索。
SphinxClient::setLimits(int $offset , int $limit , int $max_matches = 0 , int $cutoff = 0):bool
offset 结果集的偏移量.
limit 返回的匹配项数目.
max_matches 设置控制搜索过程中searchd在内存中所保持的匹配项数目.
cutoff 该设置是为高级性能优化而提供的. 它告诉searchd 在找到并处理 cutoff 个匹配后就强制停止
过滤器
//在已有的过滤器列表中添加新的过滤器.
SphinxClient::setFilter(string $attribute , array $values , bool $exclude = false):bool
attribute 属性名称.
values 整数值数组.
exclude 如果设置为 true, 则匹配该过滤规则的文档会被排除在结果之
//向现有的过滤器列表中添加新的浮动范围过滤器。只有那些属性值存储在min和max之间的索引中的文档(包括完全等于min或max的值)才会被匹配(如果exclude为真,则拒绝
SphinxClient::setFilterFloatRange(string $attribute , float $min , float $max , bool $exclude = false):bool
attribute 属性名称。
min 最小值。
max 最大值。
exclude 如果设置为true,则匹配的文档将从结果集中排除
//向现有的过滤器列表中添加新的整数范围过滤器。只有那些属性值存储在min和max之间的索引中的文档(包括完全等于min或max的值)才会被匹配(如果exclude为真,则拒绝)
SphinxClient::setFilterRange(string $attribute , int $min , int $max , bool $exclude = false):bool
attribute 属性名称。
min 最小值。
max 最大值。
exclude 如果设置为true,则匹配的文档将从结果集中排除
//清除所有当前设置的过滤器。使用多查询时,通常需要此调用。
SphinxClient::resetFilters():void
分组
//设置分组属性,功能和分组排序模式,并启用分组。分组功能与SQL中的GROUP BY子句非常相似。
SphinxClient::setGroupBy(string $attribute , int $func , string $groupsort = "@group desc"):bool
attribute 包含分组依据属性名称的字符串。
func 常量,它设置一个应用于属性值的函数,以计算分组键。
groupsort 一个可选的子句,用于控制组的排序方式
//为每个组的不同值计数计算设置属性名称。仅可用于分组查询。对于每个组,attribute将存储的所有值 ,然后将计算不同值的数量并将其返回给客户端。此功能类似于SQL中的COUNT(DISTINCT)子句
SphinxClient::setGroupDistinct(string $attribute):bool
attribute 包含分组依据属性名称的字符串
//清除当前所有的分组方式设置,并禁用分组方式。通常仅在使用多查询时才需要此调用
SphinxClient::resetGroupBy():void
计算距离
//设置锚点以进行地球距离计算,设置用于地球球距离(地理分布)计算的锚点并启用它们
SphinxClient::setGeoAnchor(string $attrlat , string $attrlong , float $latitude , float $longitude):bool
attrlat 纬度属性的名称。
attrlong 经度属性的名称。
latitude 锚定纬度(以弧度为单位)。
longitude 锚点经度(以弧度为单位)
查询状态
//查询将搜索状态,并返回状态变量名称和值对的数组。
SphinxClient::status():array
更新文档属性
//立即更新给定文档中的给定属性值
SphinxClient::updateAttributes(string $index , array $attributes , array $values , bool $mva = false):int
index 要更新的索引的名称。
attributes 属性名称数组,列出已更新的属性。
values 包含文档ID作为键的关联数组,以及作为值的属性值的数组