如何解决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);
}
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 举报,一经查实,本站将立刻删除。