Azure搜索索引字段ID和名称

时间:2016-11-16 19:45:07

标签: azure-search

首先我想说专用搜索引擎的概念对我来说都是新手,所以请放纵: - )

具有Id和Name的事务数据库实体如何转换为Azure搜索索引字段? 我们应该只添加Name,还是同时添加IdName

例如,假设我想在我的索引中使用客户端。 我想要在客户端上搜索并拥有方面。

我应该只在索引中添加ClientName吗? 如果ClientName重新命名,该怎么办? 如果ClientName不唯一,该怎么办?

我是否应该将两个字段添加到索引中并具有:

  • ClientName:可搜索
  • ClientId:Facetable,Filterable

我知道使用ClientId Facetable(而不是ClientName)会使显示方面更加有效,因为我必须自己获取与Azure搜索返回的ClientId对应的名称。

此外,如果ClientId可过滤,我认为它可以让我执行ClientName的批量重命名。

我的理由可以吗?

是否有最佳做法/指南?

修改

这是一个更具体的例子。 假设在事务性数据库中,我们为IdNameFormatLocation,{{Author提供了GenreRegion的表格。 1}},...

如果我们要在Azure搜索中构建这些方面,建议的方法是为每个方面添加IdName,并将Id字段设置为Facetable ? enter image description here

1 个答案:

答案 0 :(得分:2)

添加Id和Name可能是一个好主意,因为可能会更改名称。此外,“名称”字段可以包含任意字符,而文档ID只能包含字母数字字符,短划线,下划线和等号(请参阅Naming Rules)。

只有id字段必须是唯一的(它与关系数据库中的主键具有相同的语义)。所有其他字段可以具有非唯一值。如果值发生更改,您只需更新文档(使用mergemergeOrUpload索引操作)。

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字段可以过滤。

我希望这可以让你开始,并且因为你有更具体的问题,你可以在这里发布。