我有一个包含一些随机汽车制作数据的Azure搜索索引。其中一个数据项目是针对斯柯达的,但它恰好以'Š'开头。
当我尝试将这些数据作为分面搜索进行查询时,我希望对这些数据进行排序。这是我的原型代码:
var queryResults = searchIndexClient.Documents
.Search(
string.Empty,
new SearchParameters
{
Facets = new List<string>
{
"make,count:1000,sort:value"
},
Top = 0
});
在返回的数据中,make确实是正确排序的,但是'Škoda'出现在列表的底部。所以我猜我需要做些什么才能让Azure Search在排序时处理unicode字符,但我不知道我需要做什么。
编辑:
我使用Postman
查询serch索引,使用与上述相同的分面搜索参数:
docs?$select=make&facet=make,count:1000,sort:value
以下是返回的JSON的修剪子集,其中显示škoda
出现在底部。请注意,在我们的测试数据中,列表中的skoda
也是正确的 - 都出现在源索引数据中。
{
"@search.facets": {
"make@odata.type": "#Collection(Microsoft.Azure.Search.V2015_02_28.QueryResultFacet)",
"make": [
{
"count": 178,
"value": "rover"
},
{
"count": 1,
"value": "rover / austin"
},
{
"count": 1,
"value": "rover mg"
},
{
"count": 529,
"value": "saab"
},
{
"count": 3835,
"value": "seat"
},
{
"count": 3851,
"value": "skoda"
},
{
"count": 817,
"value": "smart"
},
{
"count": 12934,
"value": "volkswagen"
},
{
"count": 3922,
"value": "volvo"
},
{
"count": 1,
"value": "vw scirocco gti"
},
{
"count": 1,
"value": "w67 6olf"
},
{
"count": 3,
"value": "westfield"
},
{
"count": 2,
"value": "wiesmann"
},
{
"count": 3,
"value": "wolseley"
},
{
"count": 1,
"value": "zbmw"
},
{
"count": 5,
"value": "škoda"
}
]
}
}
答案 0 :(得分:1)
不幸的是,这是Azure搜索中的一个已知限制。 facet的值使用二进制顺序排序。你观察到的奇怪,škoda出现在列表的底部,是预料之中的。我们计划在这种情况下采用更先进的校对算法,但还没有固定的日期。请通过user voice创建请求,帮助我们确定优先顺序。
此时,解决问题的唯一方法是预处理构面值并在列中存储规范化(已删除小写和变音符号)字符串。
对于给您带来的不便,我们深表歉意。我们会在取得进展后立即通知您。
感谢。
Nate