我通过使用以下映射创建了索引:
PUT test9
{
"mappings" : {
"type1" : {
"properties" : {
"name" : { "type" : "text"}
}
}
}
}
之后,我在其中添加了以下文档:
PUT test9/type1/1/_create
{
"name":"suraj"
}
PUT test9/type1/2/_create
{
"name":"nitesh"
}
PUT test9/type1/3/_create
{
"name":"suresh"
}
现在,我想使用正则表达式检查名称以“ sur ”开头的文档。因此,我使用了以下查询:
GET test9/type1/_search
{
"query": {
"regexp":{
"name":"^sur"
}
}
}
以上查询未给出任何结果。请让我知道这里出什么问题了吗?如何在弹性搜索中编写正则表达式? 我们可以直接在弹性搜索中使用mongo正则表达式吗?
答案 0 :(得分:1)
在Elasticsearch中实现此目标的3种方法:
GET test9/type1/_search
{
"query": {
"prefix": {
"name": "sur"
}
}
}
GET test9/type1/_search
{
"query": {
"wildcard":{
"name":"sur*"
}
}
}
GET test9/type1/_search
{
"query": {
"regexp":{
"name":"sur.*"
}
}
}
注意:
前缀,正则表达式和通配符仅在字段的未经分析的部分上起作用。因此,不允许使用标准正则表达式的运算符^。查看允许的正则表达式字符的链接。
资源: https://www.elastic.co/guide/en/elasticsearch/guide/current/_wildcard_and_regexp_queries.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html