elasticsearch - 如何将简单的Groovy脚本转换为Lucene表达(或使用其他方法)?

标签 elasticsearch lucene

我正在使用以下选项进行搜索:

scriptSort = 
    _script:
        script: "if(doc['user.roles'].value=='contributor') return 1; else return 2;",
        type: "number",
        order: "asc"

options =
    query: ...
    size: ...
    from: ...
    aggs: ...
    sort: [scriptSort]

如您所见,我正在使用_script选项对结果进行排序。问题是我正在使用的搜索服务放弃了对groovy脚本语言的支持,并且我不得不以某种方式将此脚本重写为一个名为Lucene expressions的东西。

最佳答案

只是尝试,但这应该是一种非常通用的方法。使用function_score定义自己的过滤器,该过滤器应根据user.roles字段的值进行不同的评级。在我的示例中,我认为您应该将"match_all": {}替换为query下的所有内容(这就是我询问完整查询的原因):

{
  "query": {
    "function_score": {
      "query": {
        "match_all": {}
      },
      "functions": [
        {
          "filter": {
            "term": {
              "user.roles": "contributor"
            }
          },
          "weight": 1
        },
        {
          "filter": {
            "bool": {
              "must_not": [
                {
                  "term": {
                    "user.roles": "contributor"
                  }
                }
              ]
            }
          },
          "weight": 2
        }
      ],
      "boost_mode": "replace"
    }
  },
  "sort": [
    {
      "_score": {
        "order": "asc"
      }
    }
  ]
}

关于elasticsearch - 如何将简单的Groovy脚本转换为Lucene表达(或使用其他方法)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28635606/

相关文章:

php - Elasticsearch:试图找出合适的搜索查询算法

java - 使用 Solr/Lucene 作为持久化技术

java - 如何在 Lucene 分析器上使用多个过滤器 (Lucene 4.4)

java - 确定哪个 jar 文件包含 org.apache.lucene 类文件

java - 如何在 3.0.2 中检索 Lucene 索引的文档总数?

java - 索引@MultiField spring-data-elasticsearch。国际化目的

elasticsearch - 如何调整日期字段上的日期范围聚合值?

regex - 模式 token 生成器转换为 token 字符串,例如222 * abc ** xyz ****** 332434为222,abc,xyz,332434

elasticsearch - 错误无法定位插件类型 [对于 RollingFile 和 TimeBasedTriggeringPolicy]

elasticsearch - ElasticSearch-日期范围条件应与日期范围数组中的一项完全匹配