一尘不染

ElasticSearch全文搜索

elasticsearch

我尝试在elasticsearchJava API上使用正则表达式运行全文搜索。我的过滤器是这样的:

  FilterBuilder qFilter= FilterBuilders.regexpFilter("_all",
 ". *"+text+". *");

但是它只与一个单词匹配,而没有短语匹配。我的意思是,例如:

如果soruce中有一个字符串,例如:“ one two three four five..”,而当我的文本字符串如下:“ two”,“
our”,“ thr” …时,它就起作用了。

但是,当我的realTimeTextIn字符串为“ 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();

感谢您的帮助。


阅读 318

收藏
2020-06-22

共1个答案

一尘不染

当文本字符串为空或null时,此join方法将引发异常。您可以像这样使用regexp过滤器。

FilterBuilder qFilter = FilterBuilders.regexpFilter("_all",(".*"+q+".*").replace(" ", ".*"));
2020-06-22