首页 文章

Elasticsearch过滤器得分?

提问于
浏览
0

我有一个为Elasticsearch Build 的大人物索引(1.7.3)

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

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

我正在进行比赛查询,因为我想得分 .

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

我知道过滤器非常快,更适合这种情况(也可以缓存) . 有什么方法可以将它包装在一个过滤器中并说它是否匹配然后给它一个10的固定分数(例如)?

或者我可以坚持使用匹配查询并在内部探索?任何帮助/指针将不胜感激 .

1 回答

  • 0

    你可能想看看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"
        }
      }
    }
    

    这将是性别为F的 boost 文件

    这有帮助吗?

相关问题