Elasticsearch Java API-构建查询

内洛斯:

我浏览了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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章