提问人:mhdwrk 提问时间:12/11/2014 更新时间:12/12/2014 访问量:2546
SOLR 是否支持 String 类型字段的子字符串函数?
Does SOLR support substring function for fields of type String?
问:
在我的查询中,我需要返回一个字段的子字符串(与特定的正则表达式匹配),而不是整个字段。查看支持的函数列表(http://wiki.apache.org/solr/FunctionQuery#Available_Functions)似乎没有开箱即用的功能!有谁知道推荐的解决方案是什么?
答:
2赞
arun
12/12/2014
#1
可以使用其 fieldType 具有 PatternCaptureGroupFilter 的 copyField。copyField 应仅包含正则表达式匹配部分。
例如:你原来的字段是这样的
url: http://www.example.com
但您不希望该部分显示在检索到的字段中。http://
在架构中定义一个新的 fieldType,如下所示:
<fieldType name="url_base" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.PatternCaptureGroupFilterFactory"
pattern="https?://([a-zA-Z\-_0-9.]+)"
preserve_original="false"/>
</analyzer>
</fieldType>
因此,括号内的捕获组仅得到 .www.example.com
然后像这样定义你的复制字段:
<field name="baseUrl" type="url_base" indexed="false" stored="true" />
<copyField source="url" dest="baseUrl" />
然后,您的查询可以像 ./search?q=url:example&fl=baseUrl
当然,这是假设是一个文本字段。如果它是字符串字段,则对其进行精确匹配或正则表达式匹配。url
评论
1赞
mhdwrk
12/12/2014
这是一个索引时间解决方案,需要对现有文档重新编制索引,对吧?我对查询时间解决方案更感兴趣。
0赞
arun
12/12/2014
是的,这是一个索引时间解决方案。我不知道这个问题的查询时间解决方案。另一种方法是编写自己的客户端代码,该代码使用 Solr 的响应并生成正则表达式捕获组。
评论