我正在尝试在单个集合中索引大约30,000个数据库记录,并且根据我的要求,我需要能够在单个自定义字段中包含项目列表 - 并在我的搜索中使用它。
这是我的索引的一个例子:
<cfindex collection = "myCollection"
action = "refresh"
type = "custom"
query = "Local.myQuery"
key = "ID"
title="Title"
applications_s="A_Comma_Separated_List"
body = "a_field,a_nother_field">
在此示例中,applications_s是一个动态自定义字段(在CF10中引入),其中包含应用程序ID列表。 该字段的内容示例如下:
T1,T2,B4,G1
所有索引都很出色,但是我一直无法弄清楚如何搜索,使用应用程序列表中的单个项目作为标准。
所以,我希望能够做到这一点:
<cfsearch name="Local.qSearch"
collection="myCollection"
criteria="test AND applications_s:T1">
这应返回正文中包含“test”一词的所有记录,并在应用程序字段中包含“T1”。但是,我找不到将自定义字段的内容视为逗号分隔列表的条件语法...它似乎只能用作字符串。因此,除非我包含通配符,否则不会返回我的示例记录 - 这可能会导致错误返回额外记录的问题。
有没有办法明确指定我的自定义字段是一个列表,是否应包含我指定的值?
答案 0 :(得分:2)
我设法让以下内容在CF9.0.1上工作。虽然MYCUSTOMNAME_TYPE(例如applications_s
)字段仅为CF10,但我可以使用custom1字段并通过编辑集合的schema.xml并重新启动Solr将其指定为“字符串”类型。您不应该使用CF10。
1)在您要编制索引的查询中,将两个逗号添加到应用程序列表列的开头,最后添加 ONE ,这样一个示例行就会看起来像:
,,T1,T1B,T2,B4,G1,
您可以使用连接(首选)在SQL中执行此操作,也可以使用查询查询或QueryNew()对查询结果进行后处理,然后循环查询以构建副本。
2)使用cfindex
为applications_s
索引查询,使用cfsearch
确保字段为字符串类型,而不是文本。我们不希望列表被“标记”为单词。逗号很重要,我们不希望它们被忽略。
3)在<cfset searchString= "test">
<cfset applicationFilter = "T1">
<cfsearch name="Local.qSearch"
collection="myCollection"
criteria="#searchString# AND applications_s:,*,#applicationFilter#,*">
垫中,标准如下:
{{1}}
注意共有3个逗号和2个通配符星号。第一个逗号就在那里,因为您无法使用通配符启动Solr查询。第二个和第三个逗号确保T1的通配符搜索与T1B不匹配。