0

次のドキュメントを ElasticSearch ドメインに挿入しました。

{"depID:": "5656", "employeeID": "7777", "jobID": "2345"}
{"depID:": "6767", "employeeID": "9999", "jobID": "2345"}
{"depID:": "7676", "employeeID": "8888", "jobID": "2345"}

depID で SearchRequest を実行すると、0 件のヒットが得られます。しかし、employeeIDs または jobIDs でそれを実行すると、応答で正しいヒットが得られます。ここで何が間違っているのかわかりません。以下は、これらのドキュメントを作成する方法です。

public IndexResponse indexDocumentRequest(final String indexName, final String jsonDocument) throws IOException {
    IndexRequest indexRequest = new IndexRequest(indexName);
    indexRequest.source(jsonDocument, XContentType.JSON);
    return restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
}

IndexResponse indexResponse =
            esDao.indexDocumentRequest("employees", "{\"depID:\": \"5656\", \"employeeID\": \"7777\", \"jobID\": \"2345\"}");

以下は、SearchRequests を実行しているメソッドです。

public SearchResponse searchDocumentRequest(final String indexName, final String jsonDocument) throws IOException {
        QueryBuilder queryBuilder = QueryBuilders.wrapperQuery(jsonDocument);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(queryBuilder);
        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices(indexName);
        searchRequest.source(searchSourceBuilder);
        return restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
    }

以下は、上記の Search メソッドを呼び出す方法です。

 SearchResponse searchResponse = esDao.searchDocumentRequest("employees",
            "{\"bool\":{\"must\":[{\"match\":{\"depID\":\"5656\"}}]}}");
 SearchResponse searchResponse = esDao.searchDocumentRequest("employees",
            "{\"bool\":{\"must\":[{\"match\":{\"depID\":\"6767\"}}]}}");

上記の呼び出しはどれもヒットを返しません! ただし、他のフィールドに対する以下の呼び出しは正しいヒットを返します。

SearchResponse searchResponse = esDao.searchDocumentRequest("employees",
            "{\"bool\":{\"must\":[{\"match\":{\"employeeID\":\"7777\"}}]}}");
SearchResponse searchResponse = esDao.searchDocumentRequest("employees",
            "{\"bool\":{\"must\":[{\"match\":{\"jobID\":\"2345\"}}]}}");

ここで何が間違っていますか?depID 検索でヒットが返されないのはなぜですか? どんなアドバイスでも大歓迎です

更新: ドキュメントのインデックス マッピングは次のようです。

{
  "properties": {
    "jobID": {
      "type": "text",
      "fields": {
        "keyword": {
          "ignore_above": 256,
          "type": "keyword"
        }
      }
    },
    "depID:": {
      "type": "text",
      "fields": {
        "keyword": {
          "ignore_above": 256,
          "type": "keyword"
        }
      }
    },
    "employeeID": {
      "type": "text",
      "fields": {
        "keyword": {
          "ignore_above": 256,
          "type": "keyword"
        }
      }
    }
  }
}
4

2 に答える 2

1

データを挿入したときに作成されたインデックス マッピングを共有できますか? これは、両方のシナリオでクエリの結果を理解するのに役立つ場合があります。

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-get-mapping.html

アップデート:

問題はフィールド名にあり:ます。クエリの depID に欠落があります。

于 2021-04-08T22:46:36.347 に答える