【发布时间】:2015-03-12 14:14:24
【问题描述】:
从我之前的 post 继续,我根据 femtoRgon 的 post 更改了查询,弹性搜索不支持某些字符和锚点。
我正在寻找匹配“xxx-xx-xxxx”等模式的方法,以便使用elastic search 查找具有社会安全号码的文档。
假设,在索引文档中,我想找到所有那些社会安全号码与“xxx-xx-xxxx”模式匹配的文档。
索引文档的示例代码:
InputStream is = null;
try {
is = new FileInputStream("/home/admin/Downloads/20121221.doc");
ContentHandler contenthandler = new BodyContentHandler();
Metadata metadata = new Metadata();
Parser parser = new AutoDetectParser();
parser.parse(is, contenthandler, metadata, new ParseContext());
}
catch (Exception e) {
e.printStackTrace();
}
finally {
if (is != null) is.close();
}
搜索示例代码
QueryBuilder queryBuilderFullText = null;
queryBuilderFullText = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.regexpFilter("_all", "[0-9]{3}?[0-9]{2}?[0-9]{4}"));
SearchRequestBuilder requestBuilder;
requestBuilder = client.prepareSearch()
.setIndices(getDomainIndexId(project))
.setTypes(getProjectTypeId(project))
.setQuery(queryBuilderFullText);
SearchResponse response = requestBuilder.execute().actionGet(ES_TIMEOUT_MS);
SearchHits hits = response.getHits();
if (hits.getTotalHits() > 0) {
System.out.println(hits.getTotalHits());
} else {
return 0l;
}
我因关注而受到关注:
45-555-5462
457-55-5462
4578-55-5462
457-55-54623
457-55-5462-23
但根据我的要求,它应该只返回“457-55-5462”(基于模式匹配“xxx-xx-xxxx”)。
请帮忙。
【问题讨论】:
-
@funkwurm 我已经根据 femtoRgon 的帖子更改了查询,因为弹性搜索不支持某些字符和锚点。所以我在这里更新了我的搜索查询。
-
是的,我注意到标记后,但我无法撤消标记,抱歉。我也回答了,希望能满足你的需要:)
-
@funkwurm 没问题。感谢您的帮助,但遗憾的是,弹性搜索不支持
\d或\\d字符和^或$锚点。 -
相应地改变了我的答案
标签: java elasticsearch lucene