web-dev-qa-db-ja.com

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();

しかし、それらは異なる検索結果を生成します。見えないのでどう違いますか?また、役に立つかもしれない情報源はありますか?

11
Neilos

2つのクエリが同じ結果を返すようにする場合は、同じタイプのクエリを使用する必要があります。 Senseクエリでは、一致クエリを実行しています。

"query": {
    "match" : {
      "name" : "some string"
    }
  }

しかし、Javaコードでは、termQueryを実行しています。

QueryBuilder qb = QueryBuilders.termQuery("name", "some string");

したがって、あなたの質問に答えるには、代わりにJavaコードで一致クエリを使用します:

QueryBuilder qb = QueryBuilders.matchQuery("name", "some string");

2番目の質問については、少し広いです。私は確かにドキュメントを読み、ここで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

20
John Petrone