使用 Elasticsearch Java API 运行文本查询
Posted
技术标签:
【中文标题】使用 Elasticsearch Java API 运行文本查询【英文标题】:Run text query using Elasticsearch Java API 【发布时间】:2017-02-06 15:42:48 【问题描述】:我正在处理一项任务,我必须在 Java 代码库中将 Solr 替换为 Elasticsearch。一种方法允许将文本查询提交给 Solr:
public List<String> executeQueryForCollection(SolrQuery query, String collectionName)
throws IOException, SolrServerException
QueryResponse response = this.client.query(collectionName, query);
return response.getResults();
query
是任何有效的 Solr 查询 (name_s:'Joe Bloggs' AND age_i:15
)。与此等效的 Elasticsearch 是什么(版本 2.4.4)? Elasticsearch 的 API 似乎限制性更强。
【问题讨论】:
【参考方案1】:您需要为此使用 query_string
查询。
QueryStringQueryBuilder qs = QueryBuilders.queryStringQuery("name_s:'Joe Bloggs' AND age_i:15");
client.prepareSearch(index).setQuery(qs);
【讨论】:
client.prepareSearch(index).setQuery(qs)
比 client.prepareSearch(index).setQuery("name_s:'Joe Bloggs' AND age_i:15")
更可取,还是它们都做同样的事情?
查看我的更新答案,setQuery()
不接受字符串,只接受查询生成器对象
好的,谢谢。 setQuery()
在 2.4.4 中确实采用字符串,但从长远来看,QueryBuilder
可能更安全。
你说得对,我正在检查主分支 ;-) 所以如果你需要升级到 ES 5.x,如果你使用setQuery(String)
,你将不得不再次重构。
以上是关于使用 Elasticsearch Java API 运行文本查询的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch java api 基本搜索部分详解
使用 Elasticsearch Java API 运行文本查询