使用 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?

使用 Elasticsearch Java API 运行文本查询

Elasticsearch Java API Client 使用指南—官方原版

ElasticSearch Java API的使用

Elasticsearch java api 基本搜索部分详解