在使用 Xunsearch
进行搜索时,我们可以通过 XSSearch::addWeight
针对某个字段添加权重索引词。该字段是否包含这个词 都不影响搜索匹配结果,但如果包含会参与计算结果权重,使结果的服务器托管网相关度更高。常用于针对某一类 数据提升搜索结果排序位置。
如搜索包含 “杭州” 的结果,并且提升 subject 字段包含 “西湖” 的数据的排序
$docs = $search->setFuzzy()->setQuery('杭州')->addWeight('subject', '西湖')->search();
注意
- 这些修饰不能应用到快捷搜索中,也就是说不能直接把 Query 语句传递给
XSSearch::search
。 您必须用XSSearch::setQuery
设置搜索语句,再用不带参数的调用search
服务器托管网或count
方法。 - 区间搜索默认用的是字节序比较,如果您希望将字段值以数字方式比较大小,请将字段的类型设置为
numeric
。
添加权重后导致搜索不再进行模糊搜索问题
在 上面语句中我们可以使用 setFuzzy()
方法开启模糊搜索, 但 addWeight
方法有个bug,其将搜索模式强制改为 AND 规则的非模糊搜索形式,导致搜索结果不准确。
此处可以修改 addWeight
方法进行修复
/**
* 添加权重索引词
* 无论是否包含这种词都不影响搜索匹配, 但会参与计算结果权重, 使结果的相关度更高
* @param string $field 索引词所属的字段
* @param string|array $term 索引词
* @param float $weight 权重计算缩放比例
* @return XSSearch 返回对象本身以支持串接操作
* @see addQueryTerm
*/
public function addWeight($field, $term, $weight = 1)
{
# 此处将写死的 XS_CMD_QUERY_OP_AND_MAYBE 改为 $this->_defaultOp 即可
return $this->addQueryTerm($field, $term, $this->_defaultOp, $weight);
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
摘要:MySQL一张表最多能存多少数据? 本文分享自华为云社区《为什么MySQL单表不能超过2000万行?》,作者: GaussDB 数据库 。 最近看到一篇《我说MySQL每张表最好不要超过2000万数据,面试官让我回去等通知》的文章,非常有趣。 文中提到,…