通常の(非SXAの)サイトでレンダリングのデータ ソースのフィールドにクエリを使用した際、データ ソースの解決が失敗し、Content Deliveryのインスタンスのログに以下のエラーが出力される場合があります:
ERROR Solr Error : ["undefined field query"] - Query attempted: <Sitecore Query syntax>
この問題の原因は、非SXAサイトのデータ ソースのレンダリングにSitecoreクエリ構文が使用することができないことです。
この問題を解決するには、以下のいずれかのオプションをご検討ください:
註:上記は、Sitecoreクエリ構文に対するサポートが追加提供されることを示すものではありません。Sitecoreクエリ構文が適用されている場合に、検索インデックスを使用してデータ ソースの解決をしないようにするものです。
別の解決策として、以下のオプションが挙げられます:
SELECT [ItemId] ,[Language] ,[FieldId] ,[Value] FROM [dbo].[Fields] WHERE (FieldId = '{F1A1FE9E-A60C-4DDB-A3A0-BB5B29FE732E}' OR FieldId = '{04BF00DB-F5FB-41F7-8AB7-22408372A981}') AND ([Value] like '%ds="query%')
using Sitecore.Pipelines.ParseDataSource; using System; using System.Linq; namespace Sitecore.ContentSearch.Client.Pipelines.ParseDataSource { public class AbortIfDatasourceIsPrefixed { private readonly string[] _prefixes = { DatasourcePrefixes.QueryPrefix, DatasourcePrefixes.LocalPrefix, DatasourcePrefixes.PageRelativePrefix, DatasourcePrefixes.FieldPrefix, DatasourcePrefixes.CodePrefix, }; public void Process([NotNull] ParseDataSourceArgs args) { if (IsDataSourcePrefixed(args.DataSource)) { args.AbortPipeline(); } } protected virtual bool IsDataSourcePrefixed(string dataSource) { return dataSource.Length > 1 && dataSource.Contains(":") && _prefixes.Any(s => dataSource.StartsWith(s, StringComparison.OrdinalIgnoreCase)); } internal static class DatasourcePrefixes { public const string PageRelativePrefix = "page:"; public const string LocalPrefix = "local:"; public const string FieldPrefix = "field:"; public const string CodePrefix = "code:"; public const string QueryPrefix = "query:"; } } }
<?xml version="1.0" encoding="utf-8"?> <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:role="http://www.sitecore.net/xmlconfig/role/"> <sitecore role:require="Standalone or ContentManagement or ContentDelivery"> <pipelines> <parseDataSource> <processor type="Sitecore.ContentSearch.Client.Pipelines.ParseDataSource.CustomProcessor, Custom.Assembly" patch:before="processor[@type='Sitecore.ContentSearch.Client.Pipelines.ParseDataSource.GetDataSourceItemByQuery, Sitecore.ContentSearch.Client']" /> </parseDataSource> </pipelines> </sitecore> </configuration>