带有空格的短语中的通配符/正则表达式

时间:2018-02-01 08:31:21

标签: elasticsearch

创建索引: 在这里我使用edge_ngram

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "edge_ngram",
          "min_gram": 3,
          "max_gram": 3,
          "token_chars": [
            "letter",
            "digit"
          ]
        }
      }
    }
  },
  "mappings": {
    "my_type": {
      "properties": {
        "city": {
          "type": "keyword",
          "fields": {
            "raw": { 
              "type":  "text",
              "analyzer": "my_analyzer"
            }
          }
        }
      }
    }
  }

}





 POST my_index/my_type/1
    {
      "text": "2 #Quick Foxes lived and died"
    }

    POST my_index/my_type/2
        {
          "text": "2 #Quick Foxes lived died"
        }

现在我们搜索

GET my_index/my_type/_search
{
  "query": {
    "query_string": {
      "default_operator" : "AND",
       "query" : "f* d*",
      "fields": ["text.raw"]
    }
  }
}

只列出ID 2。但没有任何回报。

当你尝试这个

GET my_index/my_type/_search
{
 "query": {
   "query_string": {
     "default_operator" : "AND",
      "query" : "f* d*",
     "fields": ["text"]
   }
 }
}

它将返回两者。

如果我们有一个包含大量数据的索引,并且我们想搜索通配符,我们将如何进行?

单个关键字可以使用,但是如果我们添加我在示例中提到的短语,它就不会给你任何正确的结果。

1 个答案:

答案 0 :(得分:0)

要生成正则表达式,您可以关注以下网站: -

在此处生成正则表达式表达式http://buildregex.com/

并使用从https://regex101.com/

生成的表达式测试您的字符串