问题描述
我有要搜索的字段“xyz”。字段类型为关键字。字段“xyz”的不同值是 -
- a/b/c/d
- a/b/c/e
- a/b/f/g
- a/b/f/h
现在进行以下查询 -
{
"query": {
"query_string" : {
"query" : "(xyz:(\"a/b/c\"*))"
}
}
}
我应该只得到这两个结果-
- a/b/c/d
- a/b/c/e
但我得到了所有四个结果 -
- a/b/c/d
- a/b/c/e
- a/b/f/g
- a/b/f/h
编辑 - 实际上我不是直接在 ElasticSearch 上查询,我使用的是这个 API https://atlas.apache.org/api/v2/resource_DiscoveryREST.html#resource_DiscoveryREST_searchWithParameters_POST,它为elasticsearch 创建了上面提到的查询,所以我对elasticsearch query_string 没有太多控制。我可以更改的是该字段的 elasticsearch 分析器或其类型。
解决方法
您需要让 query_string
parser 知道您将使用正则表达式,因此将整个内容包装在 /.../
中并避开正斜杠:
{
"query": {
"query_string": {
"query": "xyz:/(a\\/b\\/c\\/.*)/"
}
}
}
或者,您也可以使用 regexp
query:
{
"query": {
"regexp": {
"xyz": "a/b/c/.*"
}
}
}