2017-05-31 78 views
3

我試圖建立一個現有的/自定義的分析,使使用搜索縮寫。例如,如果文本字段爲「美國銀行」,尋找美國銀行或BOA,美國銀行等應符合的記錄。ElasticSearch - 使用搜索縮寫

我該怎麼做?請幫忙。

回答

0

你或許可以使用synonym filter令牌自定義分析。

例如以下映射

{ 
"settings": { 
    "analysis": { 
     "analyzer": { 
      "my_analyzer": { 
       "tokenizer": "standard", 
       "filter": ["lowercase", "synonym_filter"] 
      } 
     }, 
     "filter": { 
      "synonym_filter": { 
       "type": "synonym", 
       "synonyms": [ 
        "bank of america,boa" 
       ], 
       "expand": true 
      } 
     } 
    } 
}, 
"mappings": { 
    "document": { 
     "properties": { 
      "text": { 
       "type": "text", 
       "analyzer": "my_analyzer", 
       "fielddata": true 
      } 
     } 
    } 
} 

}

當然,你可以添加更多的列表或使用同義詞文件。

對於查詢usecases BOfA或BOA,BofA - 可以使用兩種方法。

1)更多的同義詞,這些可能的組合

"synonyms": [ 
        "bank of america,boa" 
        "bank of america,bofa" 
       ] 

2)或保持abrevations完好,並使用模糊查詢

{ 
    "query": { 
    "match": { 
     "text" : { 
     "query": "bofa", 
     "fuzziness": 2 
     } 
    } 
    } 
} 

您需要synoyms提供abrevations到ES。