2016-04-22 130 views
0

比方说,我有我的索引两个文件:ElasticSearch同义词返回多个结果

{ 
    "name": "dog" 
} 

{ 
    "name": "dog - hypoallergenic" 
} 

我已经创建了一个同义词映射文件类似如下:

PUT syn_test 
{ 
    "settings": { 
     "analysis": { 
      "filter": { 
       "my_synonym_filter": { 
        "type": "synonym", 
        "synonyms": ["puppy=>dog","canine=>dog","kitten=>cat","feline=>cat"] 
       } 
      }, 
      "analyzer": { 
       "my_synonyms": { 
        "tokenizer": "standard", 
        "filter": [ 
         "lowercase", 
         "my_synonym_filter" 
        ] 
       } 
      } 
     } 
    }, 
    "mappings": { 
     "animal": { 
      "properties": { 
       "id": { 
        "type": "long" 
       }, 
       "name": { 
        "type": "string", 
        "analyzer": "my_synonyms" 
       } 
      } 
     } 
    } 
} 

我已经索引了两个文件:

POST syn_test/animal 
{ 
    "name": "dog - hypoallergenic" 
} 

POST syn_test/animal 
{ 
    "name": "dog" 
} 

当我搜索puppycanine,这是在我的索引映射映射为同义词dog,我得到两个dogdog - hypoallergenic结果。

我对于puppycanine查询的期望输出将仅返回dog。有没有办法强制查询只返回来自同义词的精确匹配?

回答

0

您已使用标准标记器。如果您想将名称视为只有单个值域(就像它提供的那样),您可以指定关键字标记,而不是标准。