用了Elasticsearch,一口气上5T

新手问一个关于es查询问题

Elasticsearch | 作者 Yao | 发布于2018年11月05日 | 阅读数:2987

有这样一个场景:公司招开发, 有不同的要求。 语言、年龄、工作年限、籍贯对应es里一条记录
比如 (1.横线代表空,就是对这个条件没有要求 2. count代表这个职位有几个条件, 比如A职位要求年龄 语言 籍贯, 所以count是3)
job_title   age   work_year  language    address   count
A职位       20       -        java        上海       3 
B职位       -        2        java                   2
C职位       -        3        php                    2


现在有个人的条件是:java  20岁  上海
用should查询 minimum_should_match=1, 这样A B职位肯定都会被查出来。 但是需求是必须查询传入的参数必须完全满足es里记录的每个条件。即用上述条件查询时只要A职位满足。
我现在想的是如果能知道被查出来的记录在should里match了几次, 然后再和count比较如果一致则完全匹配,但是好像实现不了。请问大佬这种查询怎么写?
已邀请:

Yao

赞同来自:

job_title   age   work_year  language    address   count
A职位       20            -                java        上海          3 
B职位        -             2                java           -              2
C职位        -             3                php           -              2

MCTW - 90后IT男

赞同来自:

用布尔查询不行吗?
 
{
  "query": {
    "bool": {
      "must": [
        {"match": {"age": 20}},
        ...
]
}
}
}

Yao

赞同来自:

还有一个规则忘了写,比如查询条件是:20岁、3年工作经验、php, 这样C职位也是满足的。查询带过来的条件不必完全满足,只要职位的条件全满足就行

zz_hello

赞同来自:

提供一个思路
"query": {
"constant_score" : {
"filter" : {
"bool" : {
"must" : [
{ "term" : { "tags" : "search" } },
{ "term" : { "tag_count" : 1 } }
]
}
}
}
}
把那些条件放入tags标签数组中,count放入tag_count中,在这样使用term,terms查询

zz_hello

赞同来自:

看到这个,不知道你可不可以试试
查找与一个或多个指定词项匹配的文档,其中必须匹配的术语数量取决于指定的最小值,应匹配字段或脚本。
PUT /my-index/doc/2?refresh
{
"codes": ["def", "ghi"],
"required_matches": 2
}

GET /my-index/_search
{
"query": {
"terms_set": {
"codes" : {
"terms" : ["abc", "def", "ghi"],
"minimum_should_match_field": "required_matches"
}
}
}
}

要回复问题请先登录注册