ElasticsearchCRUD使用(五)【Elasticsearch中的子文档,父文档】

释放双眼,带上耳机,听听看~!

设置文档搜索引擎

AdventureWorks2012用于填充搜索引擎的数据。 可以在这里下载。

以下是使用的传输方法(Entity子对象作为子文档保存在stateprovinces索引中):

注意:当您使用代码首先从Entity Framework中的现有数据库导入数据时,ElasticsearchCRUD要求将[key]属性添加到子对象主键。 这些用于为每个文档定义文档_id。 一个文件只能有一个_id!

ElasticSearchProvider for 子文档,父文档

ElasticSearchProvider类实现了Elasticsearch的访问层。 存储层使用ElasticsearchCRUD访问Elasticsearch。 需要为子/父文档配置ElasticsearchSerializerConfiguration类。 为嵌套文档设置默认配置,因此需要更改。 我在默认构造函数中已经构造了所有内容,这也可以与使用构建注入的IoC一起使用。 _context与该类具有相同的生命周期,需要处理。

定义Address 类型的映射是因为这是父索引'stateprovinces'中的子文档。 由于这个原因,默认映射需要被覆盖。 ElasticSearchMapping类可以被继承,只需要实现一个方法:GetIndexForType。 现在Address 类型将被正确映射。

这个类然后在构造函数中添加到上面的Resolver中。

现在,搜索提供可以实现CRUD功能

_context.Search方法接受在Elasticsearch Search API中直接使用的任何Json字符串。 Elasticsearch提供了如何将这个Json查询放在一起的良好文档。 因为这个例子中的查询非常简单,所以我用StringBuilder添加了它们。 如果需要更复杂的查询,也许您应该使用NEST进行搜索功能。 ElasticsearchCRUD的重点是进行CRUD操作,轻松实现简单,嵌套或父/子文档的数据传输。

SearchController

现在实现后端,需要为视图实现搜索控制器。 jTable表格使用ajax请求直接访问控制器。 jTable要求数据是所需的格式。 该表格执行分页并发送stateprovince文档的parentId(用于Elasticsearch中的地址子文档路由)

Razor视图如下:

当autocomplete 选择一个StateProvince项时,它将加载具有子address 项的jTable。 这些项目可以被编辑,删除或新的添加到父StateProvince。 所需的javascript库和css文件都包含在MVC包中。 (jQuery-UI,moment.js和jTable)
这是它的外观:
ElasticsearchCRUD使用(五)【Elasticsearch中的子文档,父文档】

给TA打赏
共{{data.count}}人
人已打赏
安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

安全运维

设计模式的设计原则

2021-12-12 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索