设置正确的过滤器时遇到问题。我的查询如下:
{
"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."
}
答案 0 :(得分:0)
是的,客户端字段也是文本类型。
client
字段必须是keyword
类型才能使用字词查询或将客户端查询从term
更改为match
:
{
"match" : {
"client" : {
"query" : "MyClient",
"boost" : 1
}
}
}