无法为我的elasticsearch查询创建正确的过滤器

时间:2017-07-25 12:58:32

标签: elasticsearch

设置正确的过滤器时遇到问题。我的查询如下:

{
    "query" : {
        "bool" : {
            "must" : [
                {
                    "query_string" : {
                        "query" : "example~",
                        "analyzer" : "standard",
                        "default_operator" : "OR",
                        "fuzziness" : "AUTO"
                    }
                },
                {
                    "term" : {
                        "client" : {
                            "value" : "MyClient",
                            "boost" : 1
                        }
                    }
                },
                {
                    "range" : {
                        "dateCreate" : {
                            "gte" : "2016-01-01T00:00:00+0200",
                            "lte" : "2016-12-31T23:59:59+0200"
                        }
                    }
                },
                {
                    "match" : {
                        "lang" : "php OR java"
                    }
                }
            ]
        }
    },
    "size" : 10,
    "from" : 0,
    "sort" : [
        {
            "_score" : {
                "order" : "desc"
            }
        }
    ]
}

“lang”字段是文本类型 我的期望是获取具有给定查询字符串的所有文档,然后我只想选择在其lang字段中具有“PHP”或“Java”的文档。 lang字段只包含“PHP”或“Java”,但从不包含两个字符串,因此我考虑使用完全匹配,但我无法使其工作。
结果实际上是两个文档的列表,但total_count = 2510。

我的一个文件不匹配:

{
  "id" : "d3295f18-a033-4934-941a-21a8bef901e8",
  "client" : "MyClient",
  "lang" : "PHP",
  "author" : null,
  "dateCreate" : "2016-03-31T00:00:00+0200",
  "title" : "Sample document",
  "content" : "This is a short text describing the deocument."
}

1 个答案:

答案 0 :(得分:0)

  

是的,客户端字段也是文本类型。

client字段必须是keyword类型才能使用字词查询或将客户端查询从term更改为match

{
    "match" : {
        "client" : {
            "query" : "MyClient",
            "boost" : 1
        }
    }
}