如何搜索/过滤确切的多个值

时间:2017-05-27 13:34:18

标签: elasticsearch

这是我的JSON ....

[{
    "course_id": 1,
    "courseintakes": "Trimester 1; Trimester 2; Trimester 3"
}, {
    "course_id": 2,
    "courseintakes": "Trimester 1; Trimester 2"
}, {
    "course_id": 3,
    "courseintakes": "Trimester 2; Trimester 3"
}, {
    "course_id": 4,
    "courseintakes": "Trimester 1; Trimester 3"
}, {
    "course_id": 5,
    "courseintakes": "Trimester 3"
}]

我想要做的是当有人在 Trimester 1或Trimester 2 上搜索时,它应该返回id为1,2,3和4但不是5的课程。

如果有人在 Trimester 1或Trimester 3 上搜索,则应该返回ID为1,2,3,4和5的课程。

我尝试了terms querymatch query

terms query不会返回任何结果。 match query返回结果,但不够精确。

有人可以建议最好的方法吗?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以分享您的弹性查询吗? 理想情况下应该是

{
    "size": <size>,
    "_source": <fields to retrieve>,
    "query": {
        "terms": {
            "courseintakes": [<query_terms>, <query_terms>]
        }
    }
}

使用_source过滤掉返回的字段。 还要检查你有哪些映射。理想情况下,你应该为课程提供非分析字段,如果你想要分析字段,那么考虑为字段课程创建你自己的分析器,根据“;”来分割单词