elasticsearch - Elasticsearch:为什么Java客户端使用不同的查询语法?

标签 elasticsearch

我是Elasticsearch的新手。我有以下查询:

{
    "query": {
        "filtered" : {
            "query" : {
                "term" : {
                    "title" : "crime"
                }
            },
            "filter" : {
                "term" : { "year" : 1961 }
            }
        }
    }
}

它可以在Windows提示符下正常运行,如下所示:
curl -XGET localhost:9200/book/_search?pretty -d @my-query.json

对于使用Java客户端的相同查询,我具有以下内容:
    SearchResponse sr = client.prepareSearch("book")
            .setTypes("fiction")
            .setQuery(query_string)
            .setFrom(page)
            .setSize(10).execute().actionGet(); 

但是,我必须使用以下查询字符串才能无异常(exception)地运行它:
{

        "filtered" : {
            "query" : {
                "term" : {
                    "title" : "crime"
                }
            },
            "filter" : {
                "term" : { "year" : 1961 }
            }
        }

}

为什么会有这样的差异?如何保留已删除的“查询”属性”?假设我必须在Java客户端中使用查询字符串。

感谢致敬!

最佳答案

严格来说,您显示的两个变体是不同的:您没有在基于URI的查询中指定类型,偏移量或大小参数(即使根据docs也可以在其中进行指定)。您也可以在Java查询中省略这些参数:

SearchResponse sr = client.prepareSearch("book")
            .setQuery(query_string)
            .execute().actionGet(); 

关于setQuery的参数,它可以是与URI变体中相同的JSON:
String theQuery = String.join(System.getProperty("line.separator"),
   "{\"filtered\" : {\"query\" : {\"term\" : {\"title\" : \"crime\"}},",
    "\"filter\" : {\"term\" : { \"year\" : 1961 }}}}");

SearchResponse sr = client.prepareSearch("book") 
.setTypes("fiction")
.setFrom(page)
.setQuery(queryString(theQuery)).execute().actionGet(); 

或者,您可以使用Java方法提供此查询的类似物:
SearchResponse sr = client.prepareSearch("book") 
.setTypes("fiction")
.setFrom(page)
.setQuery(filteredQuery(QueryBuilders.termQuery("title","crime"),
                       FilterBuilders.termFilter("year","1961")))
.execute().actionGet(); 

关于elasticsearch - Elasticsearch:为什么Java客户端使用不同的查询语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25104590/

相关文章:

elasticsearch - OXID shop和ONGR如何建立连接?

elasticsearch - Elasticsearch:术语搜索不适用于特殊字符

elasticsearch - Windows上的ElasticSearch备份,Linux上的Restore

elasticsearch 标记为单词对

elasticsearch - 这是关于springDataElasticSearch如何划分存储桶的问题

elasticsearch - 如何在Kubernetes上编辑path.data和path.log以进行Elasticsearch?

elasticsearch - _id等于特定字段时尝试使用Elasticsearch Bulk API

elasticsearch - Hibernate-Search 6和Elasticsearch集成

elasticsearch - ElasticSearch-Kibana连接错误:无法连接

ubuntu - 在ubuntu上运行多个elasticsearch服务