【发布时间】:2021-02-05 13:35:52
【问题描述】:
我有以下通过 Java 和 spring boot 数据 elasticsearch 生成的属性文件。该文件在 User.java 类中生成,属性“friends”是一个 List,其中 Friends 是一个 Fiends.java 文件,两个类文件都充当模型。本质上,我想生成一个选择语句,但使用 Spring Boot Data 查询 DSL 语言。该索引称为用户。
所以我试图实现以下 SELECT * FROM User where (userName ="Tom" ORnickname="Tom" OR friendsNickname="Tom") AND userID="3793"
或(详细-dsl)
匹配 where (userName="Tom" ORnickname="Tom" OR friendsNickname="Tom") AND userID="3793"
"mappings": {
"properties": {
"_class": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"userName": {
"type": "text"
},
"userId": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"friends": {
"type": "nested",
"properties": {
"firstName": {
"type": "text"
},
"lastName": {
"type": "text"
},
"age": {
"type": "text"
},
"friendsNickname": {
"type": "text"
}
}
},
"nickname": {
"type": "text"
}
}
}
我尝试了以下代码,但从弹性搜索返回 0 次命中,但没有骰子返回没有命中
BoolQueryBuilder query =
QueryBuilders.boolQuery()
.must(
QueryBuilders.boolQuery()
.should(QueryBuilders.matchQuery("userName", "Tom"))
.should(QueryBuilders.matchQuery("nickname", "Tom"))
.should(
QueryBuilders.nestedQuery(
"friends",
QueryBuilders.matchQuery("friendsNickname", "Tom"),
ScoreMode.None)))
.must(QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("userID", "3793")));
抱歉,如果这似乎是一个简单的问题,我对 ES 的了解很薄,如果这看起来是一个显而易见的答案,对不起。
【问题讨论】:
标签: java spring-boot elasticsearch