当前位置 : 主页 > 编程语言 > c语言 >

xunsearch 搜索时按字段索引词加权

来源:互联网 收集:自由互联 发布时间:2023-09-06
在使用 Xunsearch 进行搜索时,我们可以通过 XSSearch::addWeight 针对某个字段添加权重索引词。该字段是否包含这个词 都不影响搜索匹配结果,但如果包含会参与计算结果权重,使结果的相

在使用 Xunsearch 进行搜索时,我们可以通过 XSSearch::addWeight 针对某个字段添加权重索引词。该字段是否包含这个词 都不影响搜索匹配结果,但如果包含会参与计算结果权重,使结果的相关度更高。常用于针对某一类 数据提升搜索结果排序位置。

如搜索包含 "杭州" 的结果,并且提升 subject 字段包含 "西湖" 的数据的排序

$docs = $search->setFuzzy()->setQuery('杭州')->addWeight('subject', '西湖')->search();

注意

  • 这些修饰不能应用到快捷搜索中,也就是说不能直接把 Query 语句传递给 XSSearch::search。 您必须用 XSSearch::setQuery 设置搜索语句,再用不带参数的调用 searchcount 方法。
  • 区间搜索默认用的是字节序比较,如果您希望将字段值以数字方式比较大小,请将字段的类型设置为 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.1234xp.com/jianhu.html 处的文章,转载请说明出处】
上一篇:strlen
下一篇:没有了
网友评论