我有一个user
的数据库模型,如下:
{
"referenceId": "123",
"name": "Frank",
"department": "CS",
"negativeUserList": [ "980", "739" ]
}
我正在编写一个ES 2.4查询,通过它可以对给定name
的用户department
进行FTS查询,但是结果中不应包含ID为negativeUserList
的用户。因此,在上述对象中,即使用户ID 980
和name
和department
相同,他(980)也不应出现在搜索用户(123)的FTS中。我已经成功编写了运行良好的以下查询:
{
"query": {
"bool": {
"must": {
"multi_match": {
"query": "A",
"fields": [
"name.ngram"
],
"minimum_should_match": "100%"
}
},
"filter": {
"term": {
"department": "cs"
}
},
"must_not": {
"terms": {
"referenceId": [
"980",
"739"
]
}
}
}
}
}
但是当我将其与Spring ElasticsearchRepository集成为:
@Query("{ \"query\": { \"bool\": { \"must\": { \"multi_match\": { \"query\": \"?0\", \"fields\": [ \"name.ngram\" ], \"minimum_should_match\": \"100%\" } }, \"filter\": { \"term\": { \"department\": \"?1\" } }, \"must_not\": { \"terms\": { \"referenceId\": [ \"?2\" ] } } } } }")
Page<UserSummary> getFreeTextSearchForUser(String freeText, String currentUserDepartment, List<String> negativeUserList, Pageable pageable);
然后,当我在ES REST端点上直接运行本机查询时,尽管currentUserDepartment
为cs
和negativeUserList
为[ "980", "739" ]
时没有任何结果。
到目前为止,大多数用户在negativeUserList
中都有一个空数组,它应该可以正常运行。
编辑:
当我使用以下命令修改Spring查询时:
{ \"referenceId\": \"?2\" }
即在\"?2\"
周围没有方括号,我将收到错误消息:
Caused by: org.elasticsearch.index.query.QueryParsingException: [terms] query does not support [referenceId]
at org.elasticsearch.index.query.TermsQueryParser.parse(TermsQueryParser.java:155)
如果我现在删除双引号:
{ \"referenceId\": ?2 }
我只是没有得到任何结果,但没有错误。我在做什么错了?