我正在尝试使用Lucene 4 Regexp查询来查找社会保险号。如果使用StandardAnalyzer或EnglishAnalyzer分析字段,是否仍有某种方法来匹配诸如222-33-4444或222 33 4444之类的字符串。
据我所知,这些分析器标记SSN的组件,然后就无法捕获这3个组件的连续匹配。理想情况下,我希望222 33 4444能够匹配像"/[0-9]{3}/ /[0-9]{2}/ /[0-9]{4}/"这样的内容,但这似乎不是因为短语查询不能与正则表达式一起工作(是吗?)有什么建议吗?
发布于 2014-03-31 07:23:46
如果只有一个标识符字段或类似的字段,那么可以使用StringField或其他一些未标记的字段,在这种情况下,定义一个简单的RegExpQuery就足够简单了。
如果您试图将它们从全文字段中提取出来,则必须对其进行标记化(我假设是这样的),您可以使用SpanQuery应用编程接口构造适当的查询:
SpanQuery span1 = new SpanMultiTermQueryWrapper(new RegexpQuery(new Term("text", "[0-9]{3}")));
SpanQuery span2 = new SpanMultiTermQueryWrapper(new RegexpQuery(new Term("text", "[0-9]{2}")));
SpanQuery span3 = new SpanMultiTermQueryWrapper(new RegexpQuery(new Term("text", "[0-9]{4}")));
Query query = new SpanNearQuery({span1, span2, span3}, 0, true);
searcher.search(query, maxResults)发布于 2014-03-29 10:43:51
您可以使用INTERVAL标志:
/<000-999>/ /<00-99>/ /<0000-9999>/发布于 2014-03-29 10:52:34
我不知道lucene,但是这个正则表达式可以工作:
'\d{3}[ \-]\d{2}[ \-]\d{4}'它同时匹配以下两项:
222 33 4444和222-33-4444
https://stackoverflow.com/questions/22726165
复制相似问题