【问题标题】:elastic search regex query to search string starts with number用于搜索字符串的弹性搜索正则表达式查询以数字开头
【发布时间】:2017-12-18 06:43:07
【问题描述】:

我无法搜索以数字开头的字符串

PUT music/song/1?refresh
{
    "suggest" : [
        {
            "input": "123hello",
            "weight" : 3
        }
    ]
}

我尝试了以下正则表达式查询

POST music/_search?pretty
{
    "suggest": {
        "song-suggest" : {
            "regex" : "^[0-9].*$",
            "completion" : {
                "field" : "suggest"
            }
        }
    }
}

【问题讨论】:

标签: elasticsearch


【解决方案1】:

你应该试试[0-9]*.*

关键是 lucene 正则表达式不使用 '^''$' 作为字符串的开始和结束符号来锚定您的模式。事实上,lucene 中的正则表达式默认锚定到整个字符串,see:

大多数正则表达式引擎都允许您匹配字符串的任何部分。如果您希望正则表达式模式从字符串的开头开始或在字符串的结尾结束,那么您必须专门锚定它,使用 ^ 表示开始或使用 $ 表示结束。

Lucene 的模式总是被锚定的。提供的模式必须匹配整个字符串。

另见我非常相似的question。特别是如果您的字段可能超过 256 个字符。

不知道问题是否仍然存在,所以我把它留在这里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    相关资源
    最近更新 更多