【问题标题】:Sitecore Solr Error undefined field tagsSitecore Solr 错误未定义字段标签
【发布时间】:2016-01-24 12:02:21
【问题描述】:

我正在使用带有 SOLR 搜索提供程序的 Sitecore 8.1。当我执行搜索时,出现以下错误:

2480 2016:01:24 21:29:14 ERROR Solr Error : ["undefined field tags"] - Query  attempted: [((_basetemplates_sm:(13789a2000bc4f77a98f40d0a2f18738) AND

-standardvalue_b:(True)) AND ((title_t:(*smoking*))^9 OR (abstract_t: 

(*smoking*))^0.200000002980232 OR (articlefulltext_s: 

(*smoking*))^0.200000002980232 OR (title_t:(*be*))^9 OR (abstract_t: 

(*be*))^0.200000002980232 OR (articlefulltext_s:(*be*))^0.200000002980232 OR  

(tags:(d4426cf378c14a97be3459cd9bfe569b))^0.100000001490116))]

我认为问题在于 Sitecore API 以某种方式发送 tags 而不是 tags_sm。当我在 SOLR Admin Portal 查询字符串上手动更新此字段时,它会返回数据。

现在真正的问题是 Sitecore API 为什么/如何发送标签而不是 tags_sm。我查看了 web_index 核心上的 schema.xml,它有以下内容:

<field name="_tags" type="string" indexed="true" stored="true" multiValued="true" />

感谢您的帮助。

【问题讨论】:

  • 这是您的自定义搜索查询吗?还是内置 Sitecore 查询?对于以_ 开头的所有字段,Sitecore 不会附加后缀(如_sm)。所以 Solr 中的字段将是_tag(你应该能够与 Luke 确认这一点)。检查您的 SearchResultItem 类(您传递给 IQuerable 的类)是否具有具有 [IndexField("tags")] 属性的属性并在此处添加 undescore。
  • 感谢@MarekMusielak,您的解决方案奏效了。我将属性从 tags 更新为 _tags 它起作用了!
  • 顺便说一句,索引字段映射究竟是如何工作的,即我们如何判断是否以 _ 作为前缀。 SOLR如何决定要索引的字段的名称。
  • 我已将评论更改为答案并添加了更多解释。

标签: solr sitecore sitecore8


【解决方案1】:

我遇到了类似的问题,解决方法是匹配后端定义的字段类型。确保在 C# 中触发搜索的代码具有正确的字段类型。就我而言,当我将其切换为 Guid 时,我试图将 ID 类型用于标签,在查询索引时,名称自动以 _sm 为后缀。与 IEnumerable 相比,还要确保使用正确的集合类型 List。

注意在 Lucene 中使用 IEnumerable 的字段类型与 ID 相同的代码。

public class MySearchContentModel : SearchResultItem
{
        [IndexField(BuiltinFields.LatestVersion)]
        public bool IsLatestVersion { get; set; }

        [IndexField("Tag")]
        public List<Guid> Tag { get; set; }
}

【讨论】:

    【解决方案2】:

    对于以 _ 开头的所有字段,Sitecore 不会附加后缀(如 _sm)。所以 Solr 中的字段将是_tags(你应该能够与 Luke 确认这一点)。

    检查您的SearchResultItem 类(您传递给IQuerable 的类)是否具有具有[IndexField("tags")] 属性的属性并将其更改为[IndexField("_tags")]

    还回答了您问题的另一部分 - 您永远不必担心 Solr 中的字段名称是什么。始终将 Sitecore 配置中的内容用于 Sitecore 内置字段。对于您自己的字段,请使用小写的名称。就是这样。

    【讨论】:

      【解决方案3】:

      将根据字段类型添加 _sm 标签。检查 Sitecore.ContentSearch.Solr.DefaultIndexConfiguration 和 /sitecore/contentSearch/indexConfigurations/defaultSolrIndexConfiguration/FieldMap/typeMatches 中的元素

      这里的 id 列表映射到 typeName="guidCollection" 中的 [fieldName]_sm。检查您的配置是否具有此“_sm”扩展名。如果是,您可能需要检查,“fieldNames”的映射不包含标签字段名称,因此它不会获得正确的后缀。

      如果你改变配置记得重建索引。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-13
        • 1970-01-01
        • 1970-01-01
        • 2016-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多