SOLR - 过滤查询中的正则表达式

时间:2018-03-29 13:37:05

标签: regex search solr

我想在fq中实现Regex,但之前从未实现过。

我在属性中有以下值,而fieldtype是"小写": Prop = company1 @ city1 @ state1 @ country1 @高级分析化学家,芝加哥

我想根据正则表达式过滤结果。正则表达式应匹配上述if " company1 @ city1 @ state1 @ country1 @" +正则表达式匹配芝加哥分析在最后@符号后的任何地方。

我的要求是匹配最后@之前的确切值,然后使用正则表达式匹配剩余的字符串,因为我只想在最后一部分进行自由文本搜索。我不能将数据拆分成多列作为多值字段。

我在代码中尝试了以下正则表达式,以匹配最后@后的字符串。它在代码中工作正常,但不确定如何在SOLR中实现它。

/([^@]+(?=.*IL)(?=.*chicago)(?=.*analytical))/ig 

有人可以告诉我如何在SOLR上使用上面的正则表达式吗?

1 个答案:

答案 0 :(得分:1)

通过q=field:/regex/搜索提供Solr中的正则表达式。这假定所讨论的字段类型是一个字符串字段(或至少是一个带有KeywordTokenizer的字段),因为匹配发生在令牌级别上(如果你有一个已分析的字段,它可能被分成单独的标记并赢得&#39 ; t匹配正则表达式。)

q=field:/([^@]+(?=.*IL)(?=.*chicago)(?=.*analytical))/这样的东西可行,但/i/修饰符表示你不想关心套管。我使用带有KeywordTokenizer和LowercaseFilter的字段,然后使用小写正则表达式进行搜索:

<analyzer>
    <tokenizer class="solr.KeywordTokenizerFactory"/>           
    <filter class="solr.LowerCaseFilterFactory" />
</analyzer>

并查询:

q=field:/([^@]+(?=.*il)(?=.*chicago)(?=.*analytical))/