设置文档搜索引擎
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)
这是它的外观: