我尝试在elasticsearchJava API上使用正则表达式运行全文搜索。我的过滤器是这样的:
FilterBuilder qFilter= FilterBuilders.regexpFilter("_all", ". *"+text+". *");
但是它只与一个单词匹配,而没有短语匹配。我的意思是,例如:
如果soruce中有一个字符串,例如:“ one two three four five..”,而当我的文本字符串如下:“ two”,“ our”,“ thr” …时,它就起作用了。
one two three four five..
two
our
thr
但是,当我的realTimeTextIn字符串为“ two three”时,全文搜索将不起作用。我搜索的单词不能超过一个。
two three
我在这里想念的是什么?
其余代码如下所示:
FilterBuilder qFilter = FilterBuilders.regexpFilter("_all", ".*"+q+".*"); SearchResponse response = ClientProvider.instance().getClient().prepareSearch(index) .setTypes(type) .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setPostFilter(qFilter) .setFrom(0).setSize(250).setExplain(true) .execute() .actionGet();
感谢您的帮助。
当文本字符串为空或null时,此join方法将引发异常。您可以像这样使用regexp过滤器。
FilterBuilder qFilter = FilterBuilders.regexpFilter("_all",(".*"+q+".*").replace(" ", ".*"));