Elasticsearch Java API - 构建查询

时间:2014-06-15 01:23:05

标签: java elasticsearch

我查看了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();

但他们会产生不同的搜索结果。有什么不同,因为我看不到它?还有一个很好的信息来源可能有用吗?

1 个答案:

答案 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