微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ElasticSearch SearchRequest 不返回必须匹配文档中的第一个元素

如何解决ElasticSearch SearchRequest 不返回必须匹配文档中的第一个元素

我在 ElasticSearch 域中插入了以下文档。

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

当我对 depID 执行 SearchRequest 时,我得到了 0 次点击。但是当我在员工 ID 或工作 ID 上执行它时,我得到了正确的响应。我不确定我在这里做错了什么。下面是我如何创建这些文档。

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","employeeID": {
      "type": "text","type": "keyword"
        }
      }
    }
  }
}

解决方法

你能分享一下你插入数据时创建的索引映射吗? 这可能有助于理解两种情况下的查询结果。

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

更新:

问题在于字段名称,查询中的 depID 中缺少 :

,

您在 indexDocumentRequest 索引中使用 employees 方法为文档编制索引,并且您在 searchDocumentRequest2 索引中使用 candidates 方法运行搜索请求强>* def xxx = """ function(times){ for(i=0;i<times;i++){ karate.call('classpath:api/test/hello.feature'); } } """ * call xxx 3 索引。

由于两者的索引不同,可能是因为这个原因,您没有得到准确的搜索结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。