CFSearch solr使用自定义字段中的列表

时间:2013-06-04 17:11:01

标签: solr coldfusion lucene cfml cfsearch

我正在尝试在单个集合中索引大约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”。但是,我找不到将自定义字段的内容视为逗号分隔列表的条件语法...它似乎只能用作字符串。因此,除非我包含通配符,否则不会返回我的示例记录 - 这可能会导致错误返回额外记录的问题。

有没有办法明确指定我的自定义字段是一个列表,是否应包含我指定的值?

1 个答案:

答案 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)使用cfindexapplications_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不匹配。