regex - ElasticSearch按正则表达式排序

标签 regex elasticsearch lucene nest

我在ElasticSearch 6索引中有一个可以与regexp匹配的字段。我需要对搜索结果进行排序,以便具有匹配的值的文档排在那些不匹配的值之前。有什么方法可以在排序子句中使用regexp吗?

示例文件:

 "mappings" : {
  "unit" : {
    "properties" : {
      "description" : {
        "type" : "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
          }
        }
      }
    }
  }

我考虑过这样的脚本排序:
  "sort" : {
    "_script" : {
        "type" : "number",
        "script" : {
            "source": "regex('some_regexp_here').match(doc['description'].value) ? 1 : 0 ",
        },
        "order" : "desc"
      }
   }

可能吗?还有其他解决方法吗?谢谢。

最佳答案

我想通了。 Sort子句应如下所示:

"sort": {
  "_script": {
    "order": "desc",
    "type": "number",
    "script": {
      "source": 
         "def m = /my_regex_here/.matcher(doc['description'].value);
          if(m.matches()) {
            return 1
          } else {
            return 0
          }"
    }
  }
}

请注意,在regexp周围需要'/'符号。

关于regex - ElasticSearch按正则表达式排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52007895/

相关文章:

Java 正则表达式 (java.util.regex)。搜索美元符号

regex - 将点星正则表达式转换为 NFA

Python - 检查列表中的关键字是否在字符串中(作为一个整体)并返回找到的关键字

java - Hibernate 搜索与循环关系

java - Lucene SpanNearQuery 与 java 中的复合词

java - 在 Lucene 索引中使用 RegexQuery(不是任何其他)搜索 '$'

java - 正则表达式:在什么情况下 `/(?!^)/` 的结果会与 `//` 不同?

ELASTICSEARCH:脑裂

elasticsearch - 没有在字段ElasticSearch上声明类型[geo-point]的处理程序

elasticsearch - Elasticsearch (Kibana)- bool 结果之间的相交