文档说明

XSFieldMeta

XS
继承关系 class XSFieldMeta
版本 1.0.0
源代码 sdk/php/lib/XSFieldScheme.class.php
数据字段结构元数据 每个搜索项目包含若干个字段, 字段元数据保存在项目的 ini 配置文件中

Public 属性

隐去继承来的属性

名称类型描述定义于
cutlen int 剪取长度 (单位:字节) 用于在返回搜索结果自动剪取较长内容的字段, 默认为 0表示不截取, body 型字段默认为 300 字节 XSFieldMeta
name string 字段名称 理论上支持各种可视字符, 推荐字符范围:[0-9A-Za-z-_], 长度控制在 1~32 字节为宜 XSFieldMeta
type int 字段类型 XSFieldMeta
vno int 字段序号 取值为 0~255, 同一字段方案内不能重复, 由 XSFieldScheme::addField 进行确定 XSFieldMeta
weight int 混合区检索时的相对权重 取值范围: 1~63, title 类型的字段默认为 5, 其它字段默认为 1 XSFieldMeta

Public 方法

隐去继承来的方法

名称描述定义于
__construct() 构造函数 XSFieldMeta
__toString() 将对象转换为字符串 XSFieldMeta
fromConfig() 解析字段对象属性 XSFieldMeta
getCustomTokenizer() 获取自定义词法分析器 XSFieldMeta
hasCustomTokenizer() 判断当前字段是否采用自定义分词器 XSFieldMeta
hasIndex() 判断当前字段是否需要索引 XSFieldMeta
hasIndexMixed() 判断当前字段是否需要在混合区索引 XSFieldMeta
hasIndexSelf() 判断当前字段是否需要在字段区索引 XSFieldMeta
isBoolIndex() 判断当前字段的索引是否为布尔型 XSFieldMeta
isNumeric() 判断当前字段是否为数字型 XSFieldMeta
isSpeical() 判断当前字段是否为特殊类型 XSFieldMeta
toConfig() 将对象转换为配置文件字符串 XSFieldMeta
val() 把给定的值转换为符合这个字段的数据格式 XSFieldMeta
withPos() 判断当前字段索引是否支持短语搜索 XSFieldMeta

属性明细

cutlen 属性
public int $cutlen;

剪取长度 (单位:字节) 用于在返回搜索结果自动剪取较长内容的字段, 默认为 0表示不截取, body 型字段默认为 300 字节

name 属性
public string $name;

字段名称 理论上支持各种可视字符, 推荐字符范围:[0-9A-Za-z-_], 长度控制在 1~32 字节为宜

type 属性
public int $type;

字段类型

vno 属性
public int $vno;

字段序号 取值为 0~255, 同一字段方案内不能重复, 由 XSFieldScheme::addField 进行确定

weight 属性
public int $weight;

混合区检索时的相对权重 取值范围: 1~63, title 类型的字段默认为 5, 其它字段默认为 1

方法明细

__construct() 方法
public void __construct(string $name, array $config=NULL)
$name string 字段名称
$config array 可选参数, 初始化字段各项配置
源码: sdk/php/lib/XSFieldScheme.class.php#L298 (显示)
public function __construct($name$config null)
{
    
$this->name strval($name);
    if (
is_array($config)) {
        
$this->fromConfig($config);
    }
}

构造函数

__toString() 方法
public string __toString()
{return} string 字段名称
源码: sdk/php/lib/XSFieldScheme.class.php#L310 (显示)
public function __toString()
{
    return 
$this->name;
}

将对象转换为字符串

fromConfig() 方法
public void fromConfig(array $config)
$config array 原始配置属性数组
源码: sdk/php/lib/XSFieldScheme.class.php#L514 (显示)
public function fromConfig($config)
{
    
// type & default setting
    
if (isset($config['type'])) {
        
$predef 'self::TYPE_' strtoupper($config['type']);
        if (
defined($predef)) {
            
$this->type constant($predef);
            if (
$this->type == self::TYPE_ID) {
                
$this->flag self::FLAG_INDEX_SELF;
                
$this->tokenizer 'full';
            } elseif (
$this->type == self::TYPE_TITLE) {
                
$this->flag self::FLAG_INDEX_BOTH self::FLAG_WITH_POSITION;
                
$this->weight 5;
            } elseif (
$this->type == self::TYPE_BODY) {
                
$this->vno XSFieldScheme::MIXED_VNO;
                
$this->flag self::FLAG_INDEX_SELF self::FLAG_WITH_POSITION;
                
$this->cutlen 300;
            }
        }
    }
    
// index flag
    
if (isset($config['index']) && $this->type != self::TYPE_BODY) {
        
$predef 'self::FLAG_INDEX_' strtoupper($config['index']);
        if (
defined($predef)) {
            
$this->flag &= ~ self::FLAG_INDEX_BOTH;
            
$this->flag |= constant($predef);
        }
        if (
$this->type == self::TYPE_ID) {
            
$this->flag |= self::FLAG_INDEX_SELF;
        }
    }
    
// others
    
if (isset($config['cutlen'])) {
        
$this->cutlen intval($config['cutlen']);
    }
    if (isset(
$config['weight']) && $this->type != self::TYPE_BODY) {
        
$this->weight intval($config['weight']) & self::MAX_WDF;
    }
    if (isset(
$config['phrase'])) {
        if (!
strcasecmp($config['phrase'], 'yes')) {
            
$this->flag |= self::FLAG_WITH_POSITION;
        } elseif (!
strcasecmp($config['phrase'], 'no')) {
            
$this->flag &= ~ self::FLAG_WITH_POSITION;
        }
    }
    if (isset(
$config['non_bool'])) {
        if (!
strcasecmp($config['non_bool'], 'yes')) {
            
$this->flag |= self::FLAG_NON_BOOL;
        } elseif (!
strcasecmp($config['non_bool'], 'no')) {
            
$this->flag &= ~ self::FLAG_NON_BOOL;
        }
    }
    if (isset(
$config['tokenizer']) && $this->type != self::TYPE_ID
            
&& $config['tokenizer'] != 'default') {
        
$this->tokenizer $config['tokenizer'];
    }
}

解析字段对象属性

getCustomTokenizer() 方法
public XSTokenizer getCustomTokenizer()
{return} XSTokenizer 获取当前字段的自定义词法分析器
源码: sdk/php/lib/XSFieldScheme.class.php#L414 (显示)
public function getCustomTokenizer()
{
    if (isset(
self::$_tokenizers[$this->tokenizer])) {
        return 
self::$_tokenizers[$this->tokenizer];
    } else {
        if ((
$pos1 strpos($this->tokenizer'(')) !== false
                
&& ($pos2 strrpos($this->tokenizer')'$pos1 1))) {
            
$name 'XSTokenizer' ucfirst(trim(substr($this->tokenizer0$pos1)));
            
$arg substr($this->tokenizer$pos1 1$pos2 $pos1 1);
        } else {
            
$name 'XSTokenizer' ucfirst($this->tokenizer);
            
$arg null;
        }
        if (!
class_exists($name)) {
            
$file $name '.class.php';
            if (
file_exists($file)) {
                require_once 
$file;
            } else if (
file_exists(XS_LIB_ROOT DIRECTORY_SEPARATOR $file)) {
                require_once 
XS_LIB_ROOT DIRECTORY_SEPARATOR $file;
            }
            if (!
class_exists($name)) {
                throw new 
XSException('Undefined custom tokenizer `' $this->tokenizer '\' for field `' $this->name '\'');
            }
        }

        
$obj $arg === null ? new $name : new $name($arg);
        if (!
$obj instanceof XSTokenizer) {
            throw new 
XSException($name ' for field `' $this->name '\' dose not implement the interface: XSTokenizer');
        }
        
self::$_tokenizers[$this->tokenizer] = $obj;
        return 
$obj;
    }
}

获取自定义词法分析器 自 1.4.8 起会自动加载 lib 或当前目录下的 XSTokenizer???.class.php

hasCustomTokenizer() 方法
public bool hasCustomTokenizer()
{return} bool 是返回 true, 不是返回 false
源码: sdk/php/lib/XSFieldScheme.class.php#L403 (显示)
public function hasCustomTokenizer()
{
    return (
$this->tokenizer !== XSTokenizer::DFL);
}

判断当前字段是否采用自定义分词器

hasIndex() 方法
public bool hasIndex()
{return} bool 若需要返回 true, 不需要则返回 false
源码: sdk/php/lib/XSFieldScheme.class.php#L376 (显示)
public function hasIndex()
{
    return (
$this->flag self::FLAG_INDEX_BOTH) ? true false;
}

判断当前字段是否需要索引

hasIndexMixed() 方法
public bool hasIndexMixed()
{return} bool 若需要返回 true, 不需要则返回 false
源码: sdk/php/lib/XSFieldScheme.class.php#L385 (显示)
public function hasIndexMixed()
{
    return (
$this->flag self::FLAG_INDEX_MIXED) ? true false;
}

判断当前字段是否需要在混合区索引

hasIndexSelf() 方法
public bool hasIndexSelf()
{return} bool 若需要返回 true, 不需要则返回 false
源码: sdk/php/lib/XSFieldScheme.class.php#L394 (显示)
public function hasIndexSelf()
{
    return (
$this->flag self::FLAG_INDEX_SELF) ? true false;
}

判断当前字段是否需要在字段区索引

isBoolIndex() 方法
public bool isBoolIndex()
{return} bool 是返回 true, 不是返回 false
源码: sdk/php/lib/XSFieldScheme.class.php#L345 (显示)
public function isBoolIndex()
{
    if (
$this->flag self::FLAG_NON_BOOL) {
        return 
false;
    }
    return (!
$this->hasIndex() || $this->tokenizer !== XSTokenizer::DFL);
}

判断当前字段的索引是否为布尔型 目前只有内置分词器支持语法型索引, 自 1.0.1 版本起把非索引字段也视为布尔便于判断

isNumeric() 方法
public bool isNumeric()
{return} bool 是返回 true, 不是返回 false
源码: sdk/php/lib/XSFieldScheme.class.php#L357 (显示)
public function isNumeric()
{
    return (
$this->type == self::TYPE_NUMERIC);
}

判断当前字段是否为数字型

isSpeical() 方法
public bool isSpeical()
{return} bool 是返回 true, 不是返回 false
源码: sdk/php/lib/XSFieldScheme.class.php#L367 (显示)
public function isSpeical()
{
    return (
$this->type == self::TYPE_ID || $this->type == self::TYPE_TITLE || $this->type == self::TYPE_BODY);
}

判断当前字段是否为特殊类型 特殊类型的字段是指 id, title, body, 每个项目至多只能有一个这种类型的字段

toConfig() 方法
public string toConfig()
{return} string 转换后的配置文件字符串
源码: sdk/php/lib/XSFieldScheme.class.php#L452 (显示)
public function toConfig()
{
    
// type
    
$str "[" $this->name "]\n";
    if (
$this->type === self::TYPE_NUMERIC) {
        
$str .= "type = numeric\n";
    } elseif (
$this->type === self::TYPE_DATE) {
        
$str .= "type = date\n";
    } elseif (
$this->type === self::TYPE_ID) {
        
$str .= "type = id\n";
    } elseif (
$this->type === self::TYPE_TITLE) {
        
$str .= "type = title\n";
    } elseif (
$this->type === self::TYPE_BODY) {
        
$str .= "type = body\n";
    }
    
// index
    
if ($this->type !== self::TYPE_BODY && ($index = ($this->flag self::FLAG_INDEX_BOTH))) {
        if (
$index === self::FLAG_INDEX_BOTH) {
            if (
$this->type !== self::TYPE_TITLE) {
                
$str .= "index = both\n";
            }
        } elseif (
$index === self::FLAG_INDEX_MIXED) {
            
$str .= "index = mixed\n";
        } else {
            if (
$this->type !== self::TYPE_ID) {
                
$str .= "index = self\n";
            }
        }
    }
    
// tokenizer
    
if ($this->type !== self::TYPE_ID && $this->tokenizer !== XSTokenizer::DFL) {
        
$str .= "tokenizer = " $this->tokenizer "\n";
    }
    
// cutlen
    
if ($this->cutlen && !($this->cutlen === 300 && $this->type === self::TYPE_BODY)) {
        
$str .= "cutlen = " $this->cutlen "\n";
    }
    
// weight
    
if ($this->weight !== && !($this->weight === && $this->type === self::TYPE_TITLE)) {
        
$str .= "weight = " $this->weight "\n";
    }
    
// phrase
    
if ($this->flag self::FLAG_WITH_POSITION) {
        if (
$this->type !== self::TYPE_BODY && $this->type !== self::TYPE_TITLE) {
            
$str .= "phrase = yes\n";
        }
    } else {
        if (
$this->type === self::TYPE_BODY || $this->type === self::TYPE_TITLE) {
            
$str .= "phrase = no\n";
        }
    }
    
// non-bool
    
if ($this->flag self::FLAG_NON_BOOL) {
        
$str .= "non_bool = yes\n";
    }
    return 
$str;
}

将对象转换为配置文件字符串

val() 方法
public mixed val(mixed $value)
$value mixed 原值
{return} mixed 转换后的值
源码: sdk/php/lib/XSFieldScheme.class.php#L320 (显示)
public function val($value)
{
    if (
$this->type == self::TYPE_DATE) {
        
// 日期类型: 转换成专用的 YYYYmmdd 格式
        
if (!is_numeric($value) || strlen($value) !== 8) {
            
$value date('Ymd'is_numeric($value) ? $value strtotime($value));
        }
    }
    return 
$value;
}

把给定的值转换为符合这个字段的数据格式

withPos() 方法
public bool withPos()
{return} bool 是返回 true, 不是返回 false
源码: sdk/php/lib/XSFieldScheme.class.php#L335 (显示)
public function withPos()
{
    return (
$this->flag self::FLAG_WITH_POSITION) ? true false;
}

判断当前字段索引是否支持短语搜索

留下一条评论吧!

请到论坛 登录 后刷新本页面!