elasticsearch定制同义词/词干分数

时间:2015-02-03 17:38:14

标签: elasticsearch

我正在使用elasticsearch 1.1.2。

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

示例:

{   " multi_match" :{     "查询" :"这是一个测试",     "字段" :[" title ^ 3"," description ^ 2"," body" ]   } }

所以在我的例子中,标题是身体的三倍。

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

让我说我在寻找伤害"我想:

- 如果找到完全匹配,则给标题系数3:标题包含单词"伤害"。

- 如果找到同义词,则给标题系数2:标题包含单词" bruise"。

- 如果找到词干,则将标题系数设为1:标题包含单词"伤害"。

有没有办法进行这种自定义?

谢谢!

1 个答案:

答案 0 :(得分:8)

您可以在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"
      ]
    }
  }
}