elasticsearch 为 synonyms/stemming 自定义分数
elasticsearch customize score for synonyms/stemming
我正在使用 elasticsearch 1.1.2。
我在可搜索字段上使用具有不同权重的多重匹配查询。
示例:
{
"multi_match":{
"query" : "this is a test",
"fields" : [ "title^3", "description^2", "body" ]
}
}
因此,在我的示例中,标题的重要性是 body 的三倍。
我想根据找到的匹配自定义为每个字段指定的权重。
假设我搜索 "injury",我想:
-如果找到完全匹配则给标题一个系数3:标题包含单词"injury".
-如果找到同义词则给标题一个系数2:标题包含单词"bruise"。
-如果找到词干,则将标题的系数设为 1:标题包含单词 "injuries"。
有没有办法进行这种定制?
谢谢!
您可以通过在 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 1.1.2。
我在可搜索字段上使用具有不同权重的多重匹配查询。
示例:
{ "multi_match":{ "query" : "this is a test", "fields" : [ "title^3", "description^2", "body" ] } }
因此,在我的示例中,标题的重要性是 body 的三倍。
我想根据找到的匹配自定义为每个字段指定的权重。
假设我搜索 "injury",我想:
-如果找到完全匹配则给标题一个系数3:标题包含单词"injury".
-如果找到同义词则给标题一个系数2:标题包含单词"bruise"。
-如果找到词干,则将标题的系数设为 1:标题包含单词 "injuries"。
有没有办法进行这种定制?
谢谢!
您可以通过在 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"
]
}
}
}