【问题标题】:Elasticsearch filter with score?带分数的 Elasticsearch 过滤器?
【发布时间】:2015-12-14 09:42:00
【问题描述】:

我为 Elasticsearch (1.7.3) 构建了一个大人物索引

我正在尝试搜索人员信息(几千万)。人员的性别(即“M”或“F”)是人员文档中的众多字段之一。

当我使用匹配查询进行搜索时,它需要很长时间(我猜它必须整理大量的帖子列表?)因为可能至少有 100 万个性别。这是一个有效的观察吗?

我正在进行匹配查询,因为我想要分数。

{
  "explain": true,
  "from": 0,
  "size": 10,
  "query": {
    "filtered": {
      "query": {
        "bool": {
          "should": [
            {
              "match": {
                "Gender": {
                  "query": "F",
                  "boost": 10.0
                }
              }
            }
          ]
        }
      }
    }
  }
}

我知道过滤器非常快并且更适合此(并且也被缓存)。有什么办法可以将它包装在过滤器中并说如果它匹配然后给它一个固定的分数 10(例如)?

或者我可以继续使用匹配查询并在其中进行探索吗?任何帮助/指针将不胜感激。

【问题讨论】:

    标签: elasticsearch lucene


    【解决方案1】:

    您可能想查看function score

    另外我觉得你应该将你的 gender 字段映射为 not_analyzed 然后你的查询看起来像这样

    GET your_index/your_type/_search
    {
      "query": {
        "function_score": {
          "query": {
            "match_all": {}
          },
          "functions": [
            {
              "filter": {
                "term": {
                  "Gender": "F"
                }
              },
              "weight": 10
            }
          ],
          "score_mode": "multiply"
        }
      }
    }
    

    这将boost 性别为 F 的文档

    这有帮助吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多