在c#中建模实体,使用Nest编写高效的搜索查询.净elasticsearch

本文关键字:高效 搜索 查询 elasticsearch Nest 建模 实体 使用 | 更新日期: 2023-09-27 18:08:33

我使用的是Nest。Net作为弹性搜索客户端。

我有两个实体。比如Book, Store。

  Book
  ------------
  Id
  ISBN
  Title
  Store
  ------------
  Id
  Name

同一书号的书可以在多家书店买到。

所以我将有另一个映射实体来维护这本书&存储关系如下:

Book_Store
-------------
Id
BookId
StoreId

为了获得特定书店的图书列表,我有以下选项

  1. 使用elasticsearch的父子关系。但是一本书可以在多个商店中买到,一个商店可以有多本书。因此,从逻辑上讲,父/子不是正确的方法。

  2. 索引所有3个实体并编写查询以获得结果

  3. 有一个数组"BookIds"在商店实体和索引他们。

以上3个选项中,哪一个是正确的?

在c#中建模实体,使用Nest编写高效的搜索查询.净elasticsearch

选择3是正确的。Elasticsearch是一个文档存储,而不是一个关系数据库,所以我倾向于避开任何关系/规范化类型的方法。

可以考虑更进一步,使用嵌套类型。使用这种方法,您不仅可以在商店文档中存储图书id,还可以存储整个图书文档,从而允许您通过id(标题、ISBN等…)搜索商店中的图书。