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 回答
0

您正在使用索引中的indexDocumentRequest方法对文档进行索引,并且正在使用索引中的方法employees运行搜索请求。searchDocumentRequest2candidates

由于两个索引不同,可能因此,您无法获得准确的搜索结果。

于 2021-04-09T05:13:29.333 回答