我开始在测试项目中使用ElasticSearch,但无法解决所有字段创建搜索的问题。例如,我们有一些单词作为搜索查询,我想使用Java API在ElasticSearch中找到所有索引的对象。
我的obj有:ID,名称,地址等
我搜索了这种信息,并写成这样:
Node node = nodeBuilder().node();
Client client = node.client();
RegexpFilterBuilder qFilter = FilterBuilders.regexpFilter("_all", (".*" + query + ".*").replace(" ", ".*"));
SearchResponse response = client.prepareSearch(index)
.setTypes(type)
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setPostFilter(qFilter)
.setFrom(0).setSize(100).setExplain(true)
.execute()
.actionGet();
SearchHit[] results = response.getHits().getHits();
System.out.println("Current results: " + results.length);
我也尝试使用一个字段:
SearchResponse response = client.prepareSearch(index)
.setTypes(type)
.setSearchType(SearchType.QUERY_AND_FETCH)
.setQuery(termQuery(field, value))
.setFrom(0).setSize(100).setExplain(true)
.execute()
.actionGet();
我总是得到0结果。
您能告诉我,如何在Java中以正确的方式执行此操作吗?
好的,我花了更多时间在文档上,并且找到了解决方案,希望它对其他人有帮助!您只需要使用QueryBuilders.multiMatchQuery,值是我们的搜索词,其他字符串是要搜索到的列。
SearchResponse response = client.prepareSearch(index)
.setTypes(type)
.setSearchType(SearchType.QUERY_AND_FETCH)
.setQuery(QueryBuilders.multiMatchQuery(value,
"name", "address1", "city", "postalCode",
"countryCode", "airportCode", "locationDescription",
"shortDescription"
))
.setFrom(0).setSize(100).setExplain(true)
.execute()
.actionGet();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句