我查看了Search API的文档,但发现它们的描述性不够(即使它们编写得很好)。我正在尝试构建一个查询但很少了解所有可用的不同选项,并且无法找到有关此事的信息,在构建查询时我无法翻译查询,我可以在Sense中运行查询,我可以使用{{3 }}
In Sense我有以下内容:
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();
但他们会产生不同的搜索结果。有什么不同,因为我看不到它?还有一个很好的信息来源可能有用吗?
答案 0 :(得分:17)
如果您希望两个查询返回相同的结果,则需要使用相同类型的查询。在您的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,我将查看here以获取概述,并查看有关查询dsl至Java的信息的here。
我认为通过REST API对Elasticsearch如何工作以及对查询机制的一些了解非常有用,这对于理解Java API非常有帮助。好的开始:
http://joelabrahamsson.com/elasticsearch-101/
http://exploringelasticsearch.com/
http://java.dzone.com/articles/elasticsearch-getting-started