我想在fq中实现Regex,但之前从未实现过。
我在属性中有以下值,而fieldtype是"小写": Prop = company1 @ city1 @ state1 @ country1 @高级分析化学家,芝加哥
我想根据正则表达式过滤结果。正则表达式应匹配上述if " company1 @ city1 @ state1 @ country1 @" +正则表达式匹配芝加哥和分析在最后@符号后的任何地方。
我的要求是匹配最后@之前的确切值,然后使用正则表达式匹配剩余的字符串,因为我只想在最后一部分进行自由文本搜索。我不能将数据拆分成多列作为多值字段。
我在代码中尝试了以下正则表达式,以匹配最后@后的字符串。它在代码中工作正常,但不确定如何在SOLR中实现它。
/([^@]+(?=.*IL)(?=.*chicago)(?=.*analytical))/ig
有人可以告诉我如何在SOLR上使用上面的正则表达式吗?
答案 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))/