Azure 搜索 - 当可搜索值具有句子分隔符时,搜索突出显示值会中断

Azure Search - Search Highlight values break when the searchable value has a sentence separator

你好 Azure 搜索团队,

抱歉,如果问题看起来很大,但我想用一些数据来解释它,这可能会使问题看起来很冗长。

我来自 PowerBI 团队,我有一个关于 Azure 搜索中搜索突出显示功能文档的问题。

我昨天使用如下示例文档创建了一个基于 Azure 的搜索索引。

"DocumentId": "257d13f0-ea1f-412f-9858-baa49b35f6b5",
"ModelId": "78869cb7-352e-4415-911e-464308c6d8d9",
"TableId": "Employees",
"ColumnId": "Details",
"ColumnValues": [
    "Boston Massachusetts",
    "Tampa Florida",
    "Palo Alto California",
    "Sentenceeeeeeeeeeeeeeeeeeeeeee with 101 characters tokenwith50characterssssssssssssssssssssssssssssss",
    "Data is repeated Data is repeated Data is repeated",
    "Data is repeated. Data is repeated. Data is repeated.",
    "Washington",
    "Washington D.C"
]

请注意,只有“ColumnValues”是可搜索的。另外,请注意 ColumnValues[4]ColumnValues[5] 中的重复值,有和没有英文句子分隔符 (.)(假设索引从 0 开始)。

现在,如果用户搜索 "Data",我们会将以下搜索查询传递给 Azure 搜索:

\"/.*Data.*/\" &queryType=full &highlight=ColumnValues-100&highlightPreTag=''&highlightPostTag=" &searchMode=any &$top=1500 &$count=true

以下是搜索门户中 Azure 搜索 API 的响应:

{
    "@odata.context": "https://huynazuresearch1.search.windows.net/indexes('columnbasedindex')/$metadata#docs(*)",
    "@odata.count": 1,
    "value": [
        {
            "@search.score": 1,
            "@search.highlights": {
                "ColumnValues": [
                    "''Data\"  is repeated ''Data\"  is repeated ''Data\"  is repeated",
                    "''Data\"  is repeated.",
                    "''Data\"  is repeated.",
                    "''Data\"  is repeated."
                ]
            },
            "DocumentId": "257d13f0-ea1f-412f-9858-baa49b35f6b5",
            "ModelId": "78869cb7-352e-4415-911e-464308c6d8d9",
            "TableId": "Employees",
            "ColumnId": "Details",
            "ColumnValues": [
                "Boston Massachusetts",
                "Tampa Florida",
                "Palo Alto California",
                "Sentenceeeeeeeeeeeeeeeeeeeeeee with 101 characters tokenwith50characterssssssssssssssssssssssssssssss",
                "Data is repeated Data is repeated Data is repeated",
                "Data is repeated. Data is repeated. Data is repeated.",
                "Washington",
                "Washington D.C"
            ]
        }
    ]
}

现在,我们按预期在 return 中获得了文档,但我们对 Azure 搜索 return 编辑的搜索突出显示值进行了一些处理。

为了我们的需要,我们需要为每个匹配形成一个 ColumnInfo{ColumnId , ColumnValues} 对象。为此,我们遍历 @search.highlights 数组并尝试将每个突出显示的值映射到相应的 ColumnValues.

现在,对于 @search.highlights.ColumnValues - "''Data\" is repeated ''Data\" is repeated ''Data\" is repeated" 中的第一个值,我们可以通过等式匹配轻松地将其映射到 ColumnValues[4]

所以,我们可以很容易地形成一个ColumnInfo对象{"Details", "Data is repeated Data is repeated Data is repeated"}。 但是,对于 @search.highlights.ColumnValues 中的其余值(索引 1,2 和 3)- 我们看到它们中的所有 3 个(“''Data”被重复。”)映射到 ColumnValues[5].

我发现这有问题。当可搜索值具有 . (一些定界符),搜索突出显示在那里自行中断,因此不会 return ColumnValues 字段的整个实例。

因为我们对构建 {ColumnId , ColumnValues}ColumnInfo 对象感兴趣,所以我们对 ColumnValue 实例的整个值感兴趣,而不是 parts/highlights其中。

无论如何,我们是否可以覆盖此行为并让 Azure 搜索 return 匹配的相应 ColumnValue 的整个字符串,作为搜索突出显示的一部分? 这样可以避免我们在从 Azure 搜索中获取结果后进行 Contains 类型的匹配,以构建 {ColumnId , ColumnValues}.

的自定义 ColumnInfo 对象

我想看看为此建议的选项是什么。 如果问题很冗长,我深表歉意,如果需要,我很乐意安排一个简短的电话来讨论。

谢谢, 萨加尔

我来自 Azure 认知搜索工程团队。感谢详细的 post 帮助我理解了您的用例。

遗憾的是,在 Azure 搜索的突出显示过程中,没有机制可以覆盖文本的碎片化方式。决定在句子边界上拆分是为了与最常见的场景保持一致,即突出显示用户希望文本的特定部分用高亮显示而不是完整文本。

输入 ColumnValue 集合字段和作为亮点返回的集合之间也存在混淆。这些不相同,项目不能 co-related。突出显示包含整个字段文本中突出显示的片段的集合,并且从突出显示的角度来看集合中的所有项目构成了字段文本。

此用例必须在客户端处理,方法是解析原始输入集合并检查查询项的项目。