sitecore开发入门Sitecore的CRUD操作 - 第二部分
在上一篇(sitecore开发入门Sitecore的CRUD操作 - 第一部分)中我们讨论了如何使用Sitecore Item API,Glass,Fortis和Synthesis在Sitecore中创建项目。在这篇文章中,我们将重点关注Item API,在下一个会话中,我们将更多地关注ORM包装器以读取该数据。分裂的原因是因为Sitecore Item API在所有其他ORM中都是必不可少的(尽管ORM的一些提取了Sitecore Item API的复杂性)。
Sitecore Item API
使用Sitecore API从Sitecore中提取项目时,实际上有四种方法:Sitecore查询,快速查询,Lucene查询或ItemProvider中的直接GetItem调用。
Sitecore查询
一般情况下,您现在希望避免使用Sitecore Query从Sitecore提取数据,但有时在Sitecore内容编辑器中它可能有意义,尤其是在将其用作Multilist或其他类型的item字段的Source时。下面显示了一些如何编写典型Sitecore查询的示例。我希望将来写一篇关于编写Sitecore查询的完整文章,即使我认为现在有更好的方法来阅读sitecore项目,知道如何编写Sitecore查询仍然很重要,因为它们在整个Sitecore平台上使用。
一个基本的Sitecore查询:
上面的示例表示您可能创建并运行的相当常见的Sitecore查询。有一点需要知道,你必须在查询中转义连字符,为此,你可以将它们包装在#符号中,如上所示。
上面的示例与第一个示例类似,不同之处在于// *而不是/ *。// *将查看当前文件夹并递归搜索该文件夹下的每个文件夹,以查找您要搜索的任何条件。在此示例中,您将以递归方式为内容项下面的所有内容构建项列表(这样效率极低)。/ *只会查找当前项目的子项,然后看起来不比那更深。
在最后一个示例中,这将展示如何递归搜索当前内容文件夹的所有后代,并仅按具有与您传入的过滤器匹配的模板ID的项过滤结果。
关于Sitecore查询的一些其他限制是,它只能返回一定数量的结果。默认情况下,它只返回100个结果,但显然您可以通过修补以下配置设置来增加该数量:
快速查询
快速查询与Sitecore查询非常相似,但在使用数千个项目时,与使用较小的项目子集(通常少于100个项目)相比,快速查询是更好的选择。然而,快速查询还有一些限制。由于它的工作原理,它会在找到结果时返回结果,并且它们不会按照它们在树中找到的顺序出现。这可能会导致问题,这也是快速查询作为一种拉取数据的方式并不常见的主要原因之一。如果您正在使用内容树但不能使用一些更好的选项,例如我们将在一秒钟内描述的Lucene,并且您只需要所有数据,那么快速查询可能是一个不错的选择。
快速查询的另一个问题是Sitecore查询实际上允许更多选项来过滤结果,而快速查询将限制您可以返回的内容。语义上唯一真正的区别是,不是在查询前加上“query:”,而是用“fast:”作为前缀。
Lucene与SOLR
在我看来,这是从您的网站提取数据的首选方式,尤其是面向您网站部分的访问者,这些部分通常会看到更多的流量。Lucene与众不同,它实际上并不是Sitecore技术,只是Sitecore和Lucene之间的结合,它允许更快的方式从树中的任何地方获取项目(只要它们在索引中)。索引是从树中构建的文档集合。通常,当您向树中添加内容时,项目将添加到索引中(保存时为master,发布时为Web索引)。如果您有自定义索引,则这些索引可能会因您使用的索引重建策略而异。
要开始在lucene中编写查询,您需要使用Linq to Lucene提供程序,以便您可以编写简单的.net linq语句,这些语句将在后台转换为Lucene查询。要开始,您可以编写如下内容:
从上面的例子中可以注意到一些事项。首先是第一行,该行使用sitecore_web_index构建搜索上下文。但是,您可能并不总是想要使用此索引。如果您希望索引根据当前上下文项的上下文而变化,您可以使用:
此替代方法允许您使用上下文项来确定使用的索引。因此,如果您正在使用体验编辑器并且它正在提取数据,那么它将是该上下文中的主索引,否则如果您正在查看该网站,则您将使用Web索引。
其次,要讨论的一个重要主题是如何查询自定义字段或模板中的数据。因此,从上面的示例中,我们使用了GetQueryable <SearchResultItem>()。SearchResultItem是一种基本类型,表示您可能希望从索引中查询的公共项字段。但是,您可能会发现需要搜索其他字段,例如,如果您有文章模板,并且需要基于类别进行搜索,该类别是在网站核心中存储ID的DropList字段。要做到这一点,您需要创建一个新的POCO类来表示您需要提取的数据。然后,您将使用数据属性将索引字段映射到您要定义的属性。像这样的东西例如:
最后在最后一行,您将调用query.GetResults()。此方法返回一个具有名为Hits的属性的对象。这表示找到的与您的搜索请求匹配的数据。
sitecore开发入门Sitecore的CRUD操作 - 第二部分的更多相关文章
- sitecore开发入门Sitecore的CRUD操作 - 第一部分
在本文中,讨论如何使用Sitecore.Data.Items.Item并对这些项执行CRUD(创建,读取,更新和删除)操作.我还将介绍如何使用Glass和Fortis类库进行相同的操作,这些操作都是对 ...
- Asp.Net Web API 2(CRUD操作)第二课
Asp.Net Web API 2(CRUD操作)第二课 Asp.Net Web API 导航 Asp.Net Web API第一课:入门http://www.cnblogs.com/aehyok ...
- sitecore开发入门之Sitecore字典结构最佳实践
使用Sitecore时,一个重要的主题是如何为您的网站处理不同的语言和区域.Sitecore对此的回答是使用字典项,它基本上只代表键/值定义.但是,这个字典项可以设置为具有不同的语言版本,这几乎允许您 ...
- elasticsearch入门(简单的crud操作)
记录一下,elasticsearch从创建索引到插入数据的一个crud操作. 一.创建索引 curl -XPUT "http://192.168.99.1:9200/productindex ...
- sitecore开发入门之如何在代码中获取SITECORE图像URL
using Sitecore; using Sitecore.Data.Items; using Sitecore.Resources.Media; public string GetUrl() { ...
- sitecore开发入门教程如何获取Sitecore项目的域名
我假设您在<sites>web.config文件的部分中设置了多个站点,并且每个站点都hostName定义了一个属性,例如 <site name="website1&quo ...
- 8天掌握EF的Code First开发系列之2 简单的CRUD操作
本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 创建控制台项目 根据.Net中的类来创建数据库 简单的CRUD操作 数据库模式更改介绍 本章小结 本人的实验环境 ...
- 【转载】salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)
salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL) salesforce中对于数据库操作和JAVA等语言对于数据库操作是有一定区别的.salesfo ...
- SpringData JPA快速入门和基本的CRUD操作以及Specifications条件查询
SpringData JPA概述: SpringData JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问和操作 ...
随机推荐
- django——url(路由)配置
URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应. 在Django项目中编写路由,就是向外暴露我们接收哪些URL的请求,除此之外的任何URL都不被 ...
- 2017 United Kingdom and Ireland Programming Contest (UKIEPC 2017)
A. Alien Sunset 暴力枚举答案即可. #include<cstdio> int n,i,mx; struct P{ int h,r,t; bool night(int x){ ...
- jsp页面第一句话报这个错Syntax error, insert "}" to complete
前段时间做了个项目jsp页面出现了Syntax error, insert "}" to complete错误,是说少了个“}”花括号,错误是在第一行,删了第一行还是会有,错误也不 ...
- 十二、JDBC
day17 JDBC入门 l 导jar包:驱动! l 加载驱动类:Class.forName(“类名”); l 给出url.username.password,其中url背下来! l 使用Driver ...
- oracle 表 库实例 空间
地址 http://blog.csdn.net/g15738290530/article/details/51859048 1:个人理解 数据库可以有多个实例,其中 orcl 为默认 一般情况下,一个 ...
- Lambda查询
使用EF查询数据库,之前使用Linq表达式,现在改成另一个种方法查询:Lambda表达式 TestEntities db=new TestEntities(); ).FirstOrDefault(); ...
- Jenkins实现自动运行jmeter脚本
下载安装包 --jenkins的war包 下载地址:http://jenkins-ci.org/ 链接:https://pan.baidu.com/s/1VhwgYWqn3Bex2kCHigW5wA ...
- Python Flask Restful
Flask Restful 1.flask restful 在flask基础上进行一些封装,主要用于实现restful接口 2.restful的理解 1)URI(统一资源标识符):每一个URI代表一 ...
- 学号20175313 《Arrays和String单元测试》第八周
目录 Arrays和String单元测试 一.String类相关方法的单元测试 二.Arrays类相关方法的单元测试 三.测试过程中遇到的问题及其解决方法 四.码云链接 五.参考资料 Arrays和S ...
- Java开发规范总结
Service / DAO 层方法命名规约: 1 ) 获取单个对象的方法用 get 做前缀.2 ) 获取多个对象的方法用 list 做前缀.3 ) 获取统计值的方法用 count 做前缀.4 ) 插 ...