属性elasticsearch的字段之间的相对权重

时间:2017-05-12 20:42:37

标签: elasticsearch

我正在尝试为以三种方式分析title属性的项目设置搜索引擎。

  1. 标准文字匹配
  2. ngram分析
  3. 关键字匹配
  4. 我还希望在相同优先级中加权的那些分析找到的任何匹配的相对评分。

    这是我目前的映射

    {
        "properties": {
            "title": {
                "type": "text",
                "analyzer": "standard",
                "fields": {
                    "keyword": {
                        "type": "keyword",
                        "boost: 1
                    },
                    "ngram": {
                        "type": "text",
                        "analyzer": "custom_ngram_analyzer",
                        "boost": 2
                    }
                },
                "boost": 4
            },
            {... Other fields ...}
        }
    }
    

    我正在使用多重匹配

    进行搜索
    "query" => array(
            "multi_match" => array(
                "query" => $query,
                "type" => "best_fields",
                "fields" => array("title", "title.*", ...Other fields...),
                "tie_breaker" => 0.3,
                "minimum_should_match" => "30%"
            )
        )
    );
    

    这是应用这些自定义权重的最佳方式(按照此问题顶部的顺序)吗?我对ElasticSearch没有太多经验,所以我可能在某个地方出错了。

    有什么想法吗?

1 个答案:

答案 0 :(得分:0)

要在multi_match query中加入自定义权重,您应该这样写:

"query" => array(
        "multi_match" => array(
            "query" => $query,
            "fields" => array("title^10", "tags^5", "content^3" ...Other fields...),
            "tie_breaker" => 0.3,
            "minimum_should_match" => "30%"
        )
    )
);

在您的情况下,查询类型不应为best_field。你应该把它保留为默认值 正如您在新查询中看到的那样,您可以明确定义每个字段的权重 要调试权重,在你的查询中使用explain参数是非常好的,这样你就可以追踪到每个文档的最终得分。