Azure Search根据匹配文本的位置对结果排序



我想根据匹配文本的位置对文档进行排序,然后按字母顺序排序。

E。我有以下3个值:

PATRICK STREET WEST
MOUNT ST PATRICK ROAD
PATTI MCCULLOCH WAY

我搜索Pat*我想结果应该排序匹配文本的位置,然后按字母顺序。

E。g要求结果

PATRICK STREET WEST
PATTI MCCULLOCH WAY
MOUNT ST PATRICK ROAD

但是我得到的结果是下面的顺序。

PATRICK STREET WEST
MOUNT ST PATRICK ROAD
PATTI MCCULLOCH WAY

这是一个有点棘手的需求。让我们将其分解为两个不同的请求:

  1. 根据文本的位置对结果进行排序-没有查询语法允许您这样做,但是有一些方法可以满足此要求。允许您增强以Pat开头的文档的一个选项是创建具有相同文本的第二个字段,该字段使用带有keyword_v2标记器和小写标记过滤器的自定义分析器。只有当文本字符串以字母Pat开头时,新字段才会匹配。然后,您可以使用评分配置文件或术语增强来对该字段中的匹配进行加权,从而将那些在开始时匹配的结果带到顶部。

  2. 按字母顺序排序-我建议按搜索分数排序,然后按这样的文本排序:$orderby=search.score() desc,TextField desc。如果你遵循我第1条的建议,在字符串开头匹配的项目应该比其他项目得分更高,然后可以在该集合中按字母顺序排序。然后,所有在开始时没有匹配的项将出现在后面,并且也将按字母顺序排序。

这至少可以让您非常接近需求!如果需要的话,你也可以在客户端做一些额外的排序。

最新更新