ElasticSearch 搜索字段值不会 return
ElasticSearch Search for Field Values does not return
假设我在 Elastic Search 中有文档,它在 _source 中包含字段“provider”。
我尝试了很多查询,但 none 似乎 return 具有搜索值的文档。
文档:
"_source" : {
"jobs" : [ ],
"provider" : {
"id" : "1",
"name" : "Coursera"
},
"sckLevels" : [ ],
"scks" : [ ],
"trArea" : [ ],
"trElems" : [ ],
"training" : {
"description" : "Cyber sec desc",
"id" : "0",
"img" : "img link",
"link" : "https://google.com",
"name" : "Cyber sec",
"trainingProvID" : "1"
}
我的查询代码是:
SearchRequest searchRequest = new SearchRequest(index);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.termQuery("provider", "Coursera"));
searchRequest.source(sourceBuilder);
this.multiRequest.add(searchRequest);
我的回复是空白的。
谢谢。
您的 Elasticsearch 查询肯定没有什么问题
似乎 provider
字段是对象或嵌套类型,而在您的查询中您只是提到 Coursera
但它应该与 name
子字段匹配provider
字段并基于对象或嵌套数据类型,您需要修改查询。
您使用的 term query
未被分析并用于关键字,即完全匹配,而如果您的 name
字段定义为 text
,它将是在索引时小写并且 Coursera
与大写 C
不匹配,您需要在文本字段上使用 match
查询。
谢谢,嵌套是个问题。我以为它会搜索对象。
遇到了好线程。
这样解决的:
SearchRequest searchRequest = new SearchRequest(index);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchQuery("provider.name", "Coursera"));
searchRequest.source(sourceBuilder);
this.multiRequest.add(searchRequest);
假设我在 Elastic Search 中有文档,它在 _source 中包含字段“provider”。
我尝试了很多查询,但 none 似乎 return 具有搜索值的文档。
文档:
"_source" : {
"jobs" : [ ],
"provider" : {
"id" : "1",
"name" : "Coursera"
},
"sckLevels" : [ ],
"scks" : [ ],
"trArea" : [ ],
"trElems" : [ ],
"training" : {
"description" : "Cyber sec desc",
"id" : "0",
"img" : "img link",
"link" : "https://google.com",
"name" : "Cyber sec",
"trainingProvID" : "1"
}
我的查询代码是:
SearchRequest searchRequest = new SearchRequest(index);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.termQuery("provider", "Coursera"));
searchRequest.source(sourceBuilder);
this.multiRequest.add(searchRequest);
我的回复是空白的。
谢谢。
您的 Elasticsearch 查询肯定没有什么问题
似乎
provider
字段是对象或嵌套类型,而在您的查询中您只是提到Coursera
但它应该与name
子字段匹配provider
字段并基于对象或嵌套数据类型,您需要修改查询。您使用的
term query
未被分析并用于关键字,即完全匹配,而如果您的name
字段定义为text
,它将是在索引时小写并且Coursera
与大写C
不匹配,您需要在文本字段上使用match
查询。
谢谢,嵌套是个问题。我以为它会搜索对象。
遇到了好线程。
这样解决的:
SearchRequest searchRequest = new SearchRequest(index);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchQuery("provider.name", "Coursera"));
searchRequest.source(sourceBuilder);
this.multiRequest.add(searchRequest);