我正在使用elasticsearch 1.1.2。

我在可搜索字段上使用具有不同权重的多重匹配查询。

例子:

{
“multi_match”:{
“query”:“这是一个测试”,
“fields”:[“title ^ 3”,“description ^ 2”,“body”]
}
}

因此,在我的示例中,标题的重要性是正文的三倍。

我想根据找到的匹配项为每个字段自定义权重。

假设我搜索“伤害”,我想:

-如果找到完全匹配的标题,则使标题的系数为3:标题包含“伤害”一词。

-如果找到同义词,则为标题提供2的系数:标题包含单词“bruise”。

-如果找到词干,则为标题赋予系数1:标题包含“伤害”一词。

有没有一种方法可以进行这种自定义?

谢谢!

最佳答案

您可以通过在title值上使用multi-fields映射来实现。

它允许您将几种类型映射到相同的输入值,以便使用不同的分析器。

假设您已为同义词和词干定义了自定义分析器,请尝试更新映射:

PUT /<index_name>/<type_name>/_mapping
{
  "<type>": {
    "properties": {
      "title": {
        "type": "string",
        "fields": {
          "exact": {
            "type": "string",
            "index": "not_analyzed"
          },
          "synonym": {
            "type": "string",
            "index": "analyzed",
            "analyzer": "synonym_analyzer"
          },
          "stemmed": {
            "type": "string",
            "index": "analyzed",
            "analyzer": "stemming_analyzer"
          }
        }
      }
    }
  }
}

并且以下查询应符合您的期望:
POST /<index_name>/<type_name>/_search
{
  "query": {
    "multi_match": {
      "query": "injury",
      "fields": [
        "title.exact^3",
        "title.synonym^2",
        "title.stemmed"
      ]
    }
  }
}

关于elasticsearch为同义词/词干自定义分数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28305250/

10-13 07:48
查看更多