【问题标题】:Elasticsearch: how to disable scoring on a field?Elasticsearch:如何禁用字段评分?
【发布时间】:2018-06-23 00:26:36
【问题描述】:

我是 Elasticsearch 新手,如果答案很明显,请见谅。

以下是我对相关字段的映射:

"condition" : { "type" : "string", "store" : "no", "index": "not_analyzed", "omit_norms" : "true" }

我需要在此字段上进行搜索,但我需要对子字符串(空格分隔)进行 100% 字符串匹配(无词干等)。文档中该字段的示例如下:

{
    "condition": "abc xyz"
}

一个示例查询是:

/_search?q=condition:xyz

上面的映射是否正确?我还使用了 omit_norms (true)。就我而言,这是正确的做法吗?

如何禁用此字段的评分?我可以在映射中做到这一点吗?最好的方法是什么? (实际上我需要禁用多个评分。我确实有需要评分的字段)

感谢和问候!

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    使用omit_norms:true 不会考虑字段的长度进行评分,Elasticsearch 不会索引规范信息。因此,如果您不想使用评分,这是一件好事,因为它会为您节省一些磁盘空间。

    如果您对查询评分不感兴趣,请使用过滤查询:

    {
      "query": {
        "filtered": {
          "query": {
            "match_all": {}
          },
          "filter": {
            "bool": {
              "must": {
                "term": {
                  "condition": "abc xyz"
                }
              }
            }
          }
        }
      }
    }
    

    【讨论】:

    • Dan,所以映射是正确的,对吗?正如帖子中所说,我确实有需要评分的领域。如何在某些字段上启用评分但在其他字段上禁用的情况下进行查询?我可以在映射中指定禁用字段评分吗?再次感谢您帮助我!!!
    • 映射看起来不错。对于确实需要评分的字段,您可以在查询中而不是在过滤器中执行它们。
    • 非常感谢您的回答!最好的。
    【解决方案2】:

    过滤查询的新语法现在是:

    {
    "query": {
      "bool": {
        "must": {
          "match_all": {}
        },
        "filter": {
          "term": {
            "condition": "abc"
          }
        }
       }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-01-17
      • 2015-11-18
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多