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

Does SOLR support substring function for fields of type String?

提问人:mhdwrk 提问时间:12/11/2014 更新时间:12/12/2014 访问量:2546

问:

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

SOLR 子字符串

评论


答:

2赞 arun 12/12/2014 #1

可以使用其 fieldType 具有 PatternCaptureGroupFiltercopyField。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 的响应并生成正则表达式捕获组。