在我的查询中,我需要返回字段的子字符串(匹配特定的正则表达式)而不是整个字段。查看支持的函数列表(http://wiki.apache.org/solr/FunctionQuery#Available_Functions)似乎没有开箱即用的功能!有人知道推荐的解决方案是什么吗?
答案 0 :(得分:2)
您可以使用其fieldType为copyField的PatternCaptureGroupFilter。你的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
是文本字段。如果是字符串字段,则在其上进行精确匹配或正则表达式匹配。