首先我想说专用搜索引擎的概念对我来说都是新手,所以请放纵: - )
具有Id和Name的事务数据库实体如何转换为Azure搜索索引字段?
我们应该只添加Name
,还是同时添加Id
和Name
?
例如,假设我想在我的索引中使用客户端。 我想要在客户端上搜索并拥有方面。
我应该只在索引中添加ClientName
吗?
如果ClientName
重新命名,该怎么办?
如果ClientName
不唯一,该怎么办?
我是否应该将两个字段添加到索引中并具有:
ClientName
:可搜索ClientId
:Facetable,Filterable 我知道使用ClientId Facetable(而不是ClientName)会使显示方面更加有效,因为我必须自己获取与Azure搜索返回的ClientId对应的名称。
此外,如果ClientId
可过滤,我认为它可以让我执行ClientName
的批量重命名。
我的理由可以吗?
是否有最佳做法/指南?
修改
这是一个更具体的例子。
假设在事务性数据库中,我们为Id
,Name
,Format
,Location
,{{Author
提供了Genre
和Region
的表格。 1}},...
如果我们要在Azure搜索中构建这些方面,建议的方法是为每个方面添加Id
和Name
,并将Id
字段设置为Facetable ?
答案 0 :(得分:2)
添加Id和Name可能是一个好主意,因为可能会更改名称。此外,“名称”字段可以包含任意字符,而文档ID只能包含字母数字字符,短划线,下划线和等号(请参阅Naming Rules)。
只有id字段必须是唯一的(它与关系数据库中的主键具有相同的语义)。所有其他字段可以具有非唯一值。如果值发生更改,您只需更新文档(使用merge
或mergeOrUpload
索引操作)。
Azure Search支持最多1000个文档的批处理。如果您想要更新更多文档,则必须将更新分成多个批次。见Indexing API。这些链接显示了REST API,但当然,如果您使用.NET,.NET SDK中可以使用相同的功能。
我是否应该将两个字段添加到索引中并具有: ClientName:可搜索 ClientId:Facetable,Filterable 我知道使用ClientId Facetable(而不是ClientName)会使显示方面更加有效,因为我必须自己获取与Azure搜索返回的ClientId相对应的名称。
我们不建议将ClientId
面向表格。 Facets在具有相对较少的唯一值的字段上效果最佳。由于定义ClientId
必须是唯一的,因此如果索引中包含许多文档,则分面将无用,并且引用ClientId
的任何分面查询可能都会表现不佳。尽管如此,ClientId
可过滤也是合理的,因为在某些情况下您可能需要ClientId
检索或排除某些文档。
另外,拥有ClientId Filterable,我认为它允许我执行ClientName的批量重命名。
这不是必需的。使ClientId
可过滤使您可以按ClientId
进行过滤,仅此而已。在使用Index API更新字段时,您始终需要指定文档ID,但这并不要求ID字段可以过滤。
我希望这可以让你开始,并且因为你有更具体的问题,你可以在这里发布。