Elasticsearch must_not条款查询Spring

时间:2018-12-13 11:56:04

标签: spring-boot elasticsearch spring-data-elasticsearch

我有一个user的数据库模型,如下:

{
    "referenceId": "123",
    "name": "Frank",
    "department": "CS",
    "negativeUserList": [ "980", "739" ]
}

我正在编写一个ES 2.4查询,通过它可以对给定name的用户department进行FTS查询,但是结果中不应包含ID为negativeUserList的用户。因此,在上述对象中,即使用户ID 980namedepartment相同,他(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端点上直接运行本机查询时,尽管currentUserDepartmentcsnegativeUserList[ "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 }

我只是没有得到任何结果,但没有错误。我在做什么错了?

0 个答案:

没有答案