ElasticSearch全文搜索

我尝试在弹性搜索java api上使用正则表达式运行全文搜索。 我的filter是这样的:

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(); 

谢谢你的帮助。

当文本字符串为空或为null时,此连接方法将引发exception。 您可以像这样使用regexpfilter。

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

这是一个有趣的问题。 我找到了类似短语查询和短语匹配的内容: http : //www.elasticsearch.org/guide/en/elasticsearch/guide/current/phrase-matching.html http://www.elasticsearch.org/guide/en/elasticsearch /guide/current/_phrase_search.html

在java api中我们可以为查询执行此操作(我测试了这个):

  SearchResponse response = client.prepareSearch(index) .setTypes(type) .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setFrom(0).setSize(250).setExplain(true).setQuery(QueryBuilders.matchPhraseQuery(field, "one two")) .execute() .actionGet(); 

对不起,我找不到任何解决办法。

您可以尝试构建一个脚本filter(将普通json插入filter而不是java方法)或称为查询filter的东西: http : //www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query -filter.html

我希望它对你有所帮助。


编辑:当然有一个简单的解决方案,但我不知道它是否适合你。

 FilterBuilder qFilter= FilterBuilders.regexpFilter( "_all",". *"+Joiner.on(".*").join(text.split(" "))+". *");