我正在使用Sitecore 8.1和SOLR Search Provider。当我执行搜索时,我收到以下错误:
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_sm 。当我在SOLR管理员门户查询字符串上手动更新此字段时,它将返回数据。
现在真正的问题是Sitecore API为什么/如何发送标签而不是tags_sm。我看了web_index核心上的schema.xml,它有以下内容:
<field name="_tags" type="string" indexed="true" stored="true" multiValued="true" />
感谢您的帮助。
答案 0 :(得分:2)
对于以_
开头的所有字段,Sitecore不会附加后缀(例如_sm
)。因此,Solr中的字段将是_tags
(您应该能够通过Luke确认这一点)。
检查您的SearchResultItem
课程(传递给IQuerable
的课程)是否具有[IndexField("tags")]
属性的属性,并将其更改为[IndexField("_tags")]
。
同时回答你问题的其他部分 - 你永远不应该担心Solr中的字段名称是什么。始终使用Sitecore配置中的Sitecore内置字段。对于您自己的字段,请使用小写字母。就是这样。
答案 1 :(得分:1)
将根据字段类型添加_sm标记。检查Sitecore.ContentSearch.Solr.DefaultIndexConfiguration和/ sitecore / contentSearch / indexConfigurations / defaultSolrIndexConfiguration / FieldMap / typeMatches中的元素
这里的id列表被映射到typeName =&#34; guidCollection&#34;中的[fieldName] _sm。检查您的配置是否包含这个&#34; _sm&#34;延期。如果确实如此,您可能需要检查&#34; fieldNames&#34;的地图。不包含标签字段名称,因此它不会获得正确的后缀。
如果更改配置,请记住重建索引。
答案 2 :(得分:0)
我有一个类似的问题,解决方法是匹配后端中定义的字段类型。确保在C#中触发搜索的代码具有正确的字段类型。就我而言,当我将ID类型切换为Guid时,我试图在标签中使用ID类型,该名称在查询索引时会自动加上_sm后缀。还要确保使用正确的集合类型与IEnumerable相比,列表工作正常。
请注意,与在lucene中使用IEnumerable的ID相同的字段类型的代码。
public class MySearchContentModel : SearchResultItem
{
[IndexField(BuiltinFields.LatestVersion)]
public bool IsLatestVersion { get; set; }
[IndexField("Tag")]
public List<Guid> Tag { get; set; }
}
答案 3 :(得分:0)
IEnumerable to List转换对我有用。我有:“ undefined field tags”,这很容易被我替换为List。我正在将solr 6.6.2升级到solr 7.5