首页 > 解决方案 > Azure 搜索 - 当可搜索值具有句子分隔符时,搜索突出显示值会中断

问题描述

您好 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"
            ]
        }
    ]
}

现在,我们按预期返回了文档,但我们对 Azure 搜索返回的搜索突出显示值进行了一些处理。

对于我们的需要,我们需要为每个匹配形成一个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"}。但是,对于剩余的值(索引 1,2 和 3),@search.highlights.ColumnValues我们看到它们中的所有 3 个(“''Data”被重复。”)映射到ColumnValues[5].

我看到了这个问题。当可搜索值具有 . (一些分隔符),搜索突出显示在那里中断,因此不返回ColumnValues字段的整个实例。

由于我们对构建 的ColumnInfo对象感兴趣,因此{ColumnId , ColumnValues}我们对实例的整个价值感兴趣,ColumnValue而不是它的部分/亮点。

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

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

谢谢,萨加尔

标签: azure-cognitive-searchazure-search-.net-sdk

解决方案


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

不幸的是,在 Azure 搜索的突出显示过程中,没有覆盖文本碎片的机制。在句子边界上拆分的决定是为了与最常见的场景保持一致,即突出显示用户想要突出显示文本的特定部分而不是完整文本的位置。

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

这个用例必须在客户端通过解析原始输入集合并检查查询项的项目来处理。


推荐阅读