我目前正在使用cfsearch为我的网站整理搜索功能。我们使用的是CF 10,所以我相信它可以在Solr上运行。
在cfindex标签中,我可以看到我们可以添加一些自定义字段,但由于我们的搜索将返回大量信息,我想知道我们将如何使其他字段作为返回的一部分可用数据集?
目前我们有custom1 - custom4填充了数据库查询中的许多字段,但我们仍然需要在运行搜索时为用户或模板中提供其他属性。
有没有办法在cfindex上添加4个以上的自定义字段?
提前致谢
答案 0 :(得分:3)
Adobe在ColdFusion 10中对Solr实现进行了改进,因此它不再具有以前版本的ColdFusion具有cfindex
的自定义字段限制。即 - custom1,custom2,custom3和custom4。像往常一样,online documentation for the tag只是从以前的版本中继承而来,所以有点令人困惑。
有关详细信息,请参阅此文档 - Solr enhancements in ColdFusion 10 从存储您的自定义数据部分下的文档:
ColdFusion 9的变化
- ColdFusion 9对自定义字段(即custom1,custom2,custom3和custom4)的支持有限。 在ColdFusion 10中,自定义字段是动态的。
- 在ColdFusion 9中,显示所有自定义字段。在ColdFusion 10中,cfdump仅生成具有数据{{}}的字段。也就是说,如果您只指定了自定义1和自定义2,则只显示这两个字段。
请考虑以下代码:
<cfsearch criteria='some_criteria and column_i: [ 10 - 20 ]'...>
此处,
some_criteria
表示过滤。例如,column_i: [ 10 - 20 ]
表示搜索值介于10和20之间的所有项。column_i
是用户在编制索引时提供的自定义字段。此选项在ColdFusion 9中可用,但仅限于四个自定义字段。 在ColdFusion 10中,选项无限制。在ColdFusion 10中,您可以对必须返回搜索结果的顺序进行排序。
注意:在Solr集合中搜索字段类型字符串时,条件应在引号内,例如
criteria='string_s:"something missing"'
要指定自定义字段,请使用以下语法:
<cfindex ... datefield_dt=#date1# column_i=#secondaryColumn# body=#primaryColumn# ....../>
注意自定义字段只能包含小写字符。
在代码中,_i代表整数自定义数据,其值存储和索引。以_i结尾的任何字段名称都被视为Solr整数。 同样,_s代表字符串自定义数据。
schema.xml中列出了所有受支持的数据类型:
<dynamicfield name="*_i" type="sint" indexed="true" stored="true"/> <dynamicfield name="*_s" type="string" indexed="true" stored="true"/> <dynamicfield name="*_l" type="slong" indexed="true" stored="true"/> <dynamicfield name="*_t" type="text" indexed="true" stored="true"/> <dynamicfield name="*_b" type="boolean" indexed="true" stored="true"/> <dynamicfield name="*_f" type="sfloat" indexed="true" stored="true"/> <dynamicfield name="*_d" type="sdouble" indexed="true" stored="true"/> <dynamicfield name="*_dt" type="date" indexed="true" stored="true"/> <dynamicfield name="random*" type="random"/>
注意:
_dt
仅支持ColdFusion支持的日期格式。