如何解决无法在 ElasticSearch 搜索 api 中获得所需的搜索结果
我有要搜索的字段“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/.*"
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。