如何以Elasticsearch“ URI搜索”样式编写正则表达式

时间:2019-02-06 14:51:07

标签: regex elasticsearch

我想使用带有正则表达式的“ URI搜索”格式(https://www.elastic.co/guide/en/elasticsearch/reference/current/search-uri-request.html#search-uri-request)查询Elasticsearch,但找不到如何处理正则表达式特殊字符符号(例如\ s和简单空格)的方法。

比方说,我在索引(使用关键字分析器)中存储了[苹果计算机]一词。 该术语将与:

一起找到
  • curl -XGET http://es:9200/myindex/mytype/_search?q=name:/.*comp.*/&pretty
  • curl -XGET http://es:9200/myindex/mytype/_search?q=name:/.*appl.*/&pretty
  • curl -XGET http://es:9200/myindex/mytype/_search?q=name:/.*pple.*/&pretty

但是使用这些正则表达式查询时应该使用什么语法(在curl或其他工具中):

 /.*pple\s+compu.*/
 /.*le +compu.*/

1 个答案:

答案 0 :(得分:0)

我想我已经找到了解决我的问题的方法:
首先,我的索引设置是这样的,我需要使用name.keyword进行全文搜索

{
  "myindex" : {
    "aliases" : { },
    "mappings" : {
      "mytype" : {
        "properties" : {
          "name" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
...

然后,使用“ URI搜索”格式进行查询,我必须使用Tipycal转换 空格应写为+ +应该写为%2b 网址中的任何其他特殊字符都应使用等效的%ASCII书写 所以原来我的正则表达式/.*le +compu.*/必须这样查询:
curl -XGET "http://es:9200/myindex/mytype/_search?q=name.keyword:/.*pple+%2bcomp.*/&pretty"
最后,我在regexp文档或lucene中看不到\s符号作为空间通配符的任何提及,但没什么大不了的,因为它可以使用regexp子模式重写。 / p>