我浏览了Search API文档,但发现它们的描述性不够(即使它们写得很好)。我正在尝试构建查询,但是几乎不了解所有可用的不同选项,并且在构建查询时无法找到有关此问题的信息,并且无法将可以在Sense中运行的查询转换为可以使用Java API运行的查询。
从某种意义上说,我有以下几点:
GET index/_search
{
"query": {
"match" : {
"name" : "some string"
}
}
}
在我的Java代码中,我有:
node = nodeBuilder().client(true).clusterName(CLUSTER_NAME).node();
client = node.client();
QueryBuilder qb = QueryBuilders.termQuery("name", "some string");
SearchResponse response = client.prepareSearch("index") //
.setQuery(qb) // Query
.execute().actionGet();
但是它们产生不同的搜索结果。我看不到有什么区别?是否还有可能有用的良好信息来源?
如果要使两个查询返回相同的结果,则需要使用相同的查询类型。在您的Sense查询中,您正在执行匹配查询:
"query": {
"match" : {
"name" : "some string"
}
}
但是在您的Java代码中,您正在执行termQuery:
QueryBuilder qb = QueryBuilders.termQuery("name", "some string");
因此,要回答您的问题,请在Java代码中使用匹配查询:
QueryBuilder qb = QueryBuilders.matchQuery("name", "some string");
关于第二个问题,这个问题有点广泛。我当然会尝试浏览文档并在StackOverflow上进行搜索。关于Java API,我将在此处查看概述,并在此处查看有关通过Java查询dsl的信息。
我认为,对Elasticsearch的工作原理有一个很好的一般理解,并且对通过REST API的查询机制有所了解,将对理解Java API很有帮助。良好的起点:
http://joelabrahamsson.com/elasticsearch-101/
http://exploringelasticsearch.com/
http://java.dzone.com/articles/elasticsearch-getting-started
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句