我的索引包含值为field
的{{1}}视频。如果我执行以下查询:
1.flv
查询仍会返回1.flv。
的所有记录有人能指出我正确的解决方案吗?
以下是1.flv返回的示例数据(如您所见,没有任何内容包含2.flv!)
"query": {
"query_string": {
"query": "2.flv"
}
}
答案 0 :(得分:6)
您所看到的是标准标记器(默认/标准分析器的一部分)的结果,它标记了句点字符(.
)等。有关如何分析它的快速示例,请参阅this play。
有很多方法可以通过Elasticsearch实现您的目标,例如更新映射并将video
字段的分析器更改为例如上面提到的keyword
分析器,可能使用多字段输入类型,将字段映射配置为index: not_analyzed
等,但一个可能适合您的简单解决方案是确保使用AND
运算符。
默认情况下,query string query使用OR
运算符:
default_operator
:如果未指定显式运算符,则使用默认运算符。例如,使用OR的默认运算符,匈牙利的查询资本将转换为OR匈牙利的资本OR,并且使用AND的默认运算符,相同的查询将转换为AND匈牙利的资本AND。默认值为OR。
因此,要么对运算符显式,要么将其设置为默认值。 This play还会显示这两种技术(右下方的搜索#1和搜索#2标签)。