在我的查询中,我需要返回字段的子字符串(匹配特定的正则表达式)而不是整个字段。查看支持的函数列表( http://wiki.apache.org/solr/FunctionQuery#Available_Functions )似乎没有这样的现成函数!有人知道推荐的解决方案是什么吗?
最佳答案
您可以使用 copyField其 fieldType 有 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
是一个文本字段。如果是字符串字段,则对其进行精确匹配或正则表达式匹配。
关于solr - SOLR 是否支持 String 类型字段的子字符串函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27410572/