在Azure搜索建议中使用top

时间:2016-04-20 20:53:10

标签: azure azure-search

我正在使用Azure搜索构建搜索页面。在我的页面上,我有一个搜索框。我想向用户提供建议。为了做到这一点,我在我的索引上使用Suggestions endpoint。目前,我的请求包含以下查询字符串:

 <?php
 defined('BASEPATH') OR exit('No direct script access allowed');

class Site extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->model('insert_model');
$this->load->helper( array( 'form' ) );

}

   public function index(){


    $this->load->view('view_form');
   $data = array(
 'name' => $this->input->post('name'),
 'unit_price' => $this->input->post('unit_price'),
 'description' => $this->input->post('description')    
  );
   $this->load->view('view_form', $data);

   $this->insert_model->form_insert($data);
   $data['message'] = 'Data Inserted Successfully';



   }

 }

我的问题是,top如何确定返回哪三个结果?它是通过搜索索引遇到的前三场比赛吗?或者是别的什么?根据URL结构,我认为它不使用评分配置文件。所以,我排除了相关性。但后来我开始阅读有关search=sta&suggesterName=sites&$top=3 字段的内容,我感到困惑。

如果minimumCoverage端点只返回遇到的第一个[suggest]匹配项,那么为什么甚至需要top字段?

1 个答案:

答案 0 :(得分:2)

通常,$top会根据查询其余部分指定的顺序为您提供前N个结果。对于没有$orderby的查询,排序顺序按相关性得分降序。这适用于SuggestSearch

请注意,仅仅因为您没有评分配置文件(例如Suggest),这并不意味着Azure搜索不会计算每个文档的相关性得分。评分档案可以影响评分,但他们并没有完全定义。

对于$orderby的查询,结果的顺序首先由$orderby中的字段定义,然后在有任何关系被打破时按分数定义。

minimumCoverage与排序或$top无关。它与搜索查询的分发方式有关。每个查询都是针对索引的不同子集同时执行的(无论您是否有多个搜索单元,都会发生这种情况)。有时,无论出于何种原因,这些子集中的一个都无法执行,通常是在您的搜索服务负载很重的情况下。 minimumCoverage参数提供了一种放松规则的方法,该规则通常表示&#34; X%的索引必须成功执行查询才能将整个查询视为成功&#34; (默认情况下,Search的X为100,Suggest默认为80)。这是一种在重负载或部分中断的情况下权衡搜索结果完整性以获得更高可用性的方法。