2016-04-22 118 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

您已使用標準標記器。如果您想將名稱視爲只有單個值域(就像它提供的那樣),您可以指定關鍵字標記,而不是標準。