如何解决ElasticSearch搜索字段值不返回
让我们说我在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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。