Azure搜索结果是否保证*查询的顺序?

时间:2017-08-15 13:53:10

标签: c# azure azure-search azure-search-.net-sdk

我想通过AzSearch C#SDK管理AzSearch文档(索引项目)。

我尝试做的是按查询结果(主要是*结果)连续列出文档并编辑它们的值。

列出查询结果如下;

public async Task<IEnumerable<MyIndexModel>> GetListAsync(string query, bool isNext = false)
{
    if (string.IsNullOrEmpty(query)) query = "*";
    DocumentSearchResult list;
    if (!isNext)
    {
        list = await _indexClient.Documents.SearchAsync(query);
    }
    else
    {
        list = await _indexClient.Documents.ContinueSearchAsync(ContinuationToken);
    }
    ContinuationToken = list.ContinuationToken;
    return list.Results.Select(o => o.Document.ToIndexModel());
}

一个要求是跳转到第n个项目列表。由于AzSearch不提供分页,我想知道它是否给出了有序列表。

如果我们更新文档计数(不是进一步索引),AzSearch会给出未更改/有序列表,这样我就可以通过运行jump to 80th list来获取ContinueSearchAsync()的相同文档方法80次?

我是否必须为我的要求维护另一个查找表?

1 个答案:

答案 0 :(得分:0)

*是通配符查询。匹配通配符查询的文档在排名中具有相同的常量分数,因为无法测量文档与的接近程度。此外,不保证相同分数文档之间的顺序。匹配&#39; &#39;即使发出相同的查询,也可以在一个响应中排名第一,在另一个响应中排在第7位。

为了获得通配符查询的一致排序,我建议传入$ orderBy子句,例如search = *&amp; $ orderBy = id asc。 Azure Search确实支持通过$ skip和$ top进行分页。这个document提供了指导。