【发布时间】:2016-04-09 00:18:58
【问题描述】:
我正在尝试使用 elasticsearch 检索一些公司结果。我想让公司以“A”开头,然后是“B”等。如果我只是用“前缀”做一个非常典型的查询,就像这样
GET apple/company/_search
{
"query": {
"prefix": {
"name": "a"
}
},
"fields": [
"id",
"name",
"websiteUrl"
],
"size": 100
}
但这将返回 Acme 以及 Lemur and Associates,因此我需要区分全名开头的 A 和单词开头的 A。
看起来正则表达式会在这里拯救,但弹性搜索只是忽略我尝试的任何内容。在与其他应用程序的测试中,^[\S]a* 应该为您提供以A 开头且前面没有空格的任何内容。弹性搜索返回 0 个结果,结果如下:
GET apple/company/_search
{
"query": {
"regexp": {
"name": "^[\S]a*"
}
},
"fields": [
"id",
"name",
"websiteUrl"
],
"size": 100
}
事实上,Elasticsearch 的 Sense UI 会立即提醒您“错误的字符串语法错误”。那是因为即使在查询中弹性搜索也希望某些字符被转义。尽管如此,^[\\S]a* 也不起作用。
【问题讨论】:
-
尝试
\b字边界而不是[\S]。
标签: regex elasticsearch