SOLR是否支持String类型字段的子字符串函数?

时间:2014-12-10 20:51:11

标签: solr substring

在我的查询中,我需要返回字段的子字符串(匹配特定的正则表达式)而不是整个字段。查看支持的函数列表(http://wiki.apache.org/solr/FunctionQuery#Available_Functions)似乎没有开箱即用的功能!有人知道推荐的解决方案是什么吗?

1 个答案:

答案 0 :(得分:2)

您可以使用其fieldType为copyFieldPatternCaptureGroupFilter。你的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是文本字段。如果是字符串字段,则在其上进行精确匹配或正则表达式匹配。