问题描述
让我们说我在Elastic Search中有文档,该文档的_source中确实包含字段“ provider”。
文档:
"_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
,但应与{{1 }}字段,并根据对象或嵌套数据类型,您需要修改查询。 -
您正在使用
name
,它不会被分析并用于关键字(即完全匹配),而如果将provider
字段定义为term query
,则会在索引时间将其小写和name
与大写text
不匹配,您需要在文本字段上使用Coursera
查询。
谢谢,嵌套是问题所在。我以为它将对对象进行搜索。
在好的线程中来。
像这样解决它:
SearchRequest searchRequest = new SearchRequest(index);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchQuery("provider.name","Coursera"));
searchRequest.source(sourceBuilder);
this.multiRequest.add(searchRequest);