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。突出显示包含整个字段文本中突出显示的片段的集合,并且从突出显示的角度来看集合中的所有项目构成了字段文本。
此用例必须在客户端处理,方法是解析原始输入集合并检查查询项的项目。
你好 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。突出显示包含整个字段文本中突出显示的片段的集合,并且从突出显示的角度来看集合中的所有项目构成了字段文本。
此用例必须在客户端处理,方法是解析原始输入集合并检查查询项的项目。