2016-01-24 51 views
1

我正在使用Sitecore 8.1和SOLR搜索提供程序。当我执行搜索我得到以下错误:Sitecore Solr错误未定义的字段标记

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 Admin Portal查询字符串上手动更新此字段时,它会返回数据。

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

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

感谢您的帮助。

+0

它是您的自定义搜索查询吗?或者内置Sitecore查询?对于以'_'开头的所有字段,Sitecore不会附加后缀(如'_sm')。所以Solr的领域将是'_tag'(你应该可以通过卢克证实这一点)。检查你的'SearchResultItem'类(你传递给IQuerable的那个类)是否有一个带有[[IndexField(“tags”)]属性的属性,并在那里添加非内容。 –

+0

感谢@MarekMusielak,您的解决方案奏效。我将标签的属性更新为_tags工作! –

+0

btw,索引字段映射究竟如何工作,即如何判断是否以_作为前缀。 SOLR如何决定索引字段的名称。 –

回答

2

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

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

也回答你的问题的其他部分 - 你不应该担心什么是Solr的字段名称。始终使用Sitecore内置字段的Sitecore配置中的内容。而对于你自己的领域,使用他们的名字小写。而已。

1

将根据字段类型添加_sm标记。检查Sitecore.ContentSearch.Solr.DefaultIndexConfiguration和ID的列表被映射到在类型名称= “guidCollection”[fieldName的] _sm在/ Sitecore的/ contentSearch/indexConfigurations/defaultSolrIndexConfiguration/FieldMap/typeMatches

这里的元素。检查你的配置是否有这个“_sm”扩展名。如果确实如此,您可能需要检查“fieldNames”的地图是否包含标签字段名称,以便它不会获得正确的后缀。

如果更改配置,请记住重建索引。

相关问题