Elasticsearch 自定义同义词/词根得分

6
我正在使用elasticsearch 1.1.2。
我正在使用multimatch查询,在可搜索的字段上使用不同的权重。
例如: { "multi_match" : { "query" : "this is a test", "fields" : [ "title^3", "description^2", "body" ] } }
所以在我的例子中,标题比正文重要三倍。
我想根据找到的匹配自定义每个字段的权重。
假设我搜索“受伤”,我想要:
-如果找到精确匹配:标题包含单词“injury”,则为标题分配系数3。
-如果找到同义词:标题包含单词“bruise”,则为标题分配系数2。
-如果找到词干:标题包含单词“injuries”,则为标题分配系数1。
是否有一种方法可以进行这种类型的自定义?
谢谢!
1个回答

9
你可以通过在title值上使用多字段映射来实现这一点。
它允许你将多种类型映射到同一个输入值,因此可以使用不同的分析器。
假设你已经为同义词和词干定义了自定义分析器,请尝试更新你的映射:
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"
      ]
    }
  }
}

谢谢!这正是我在寻找的。 - Zied Koubaa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接