2016-02-02 40 views

回答

1

您可以使用拼音標記過濾器 以此目的。註音過濾器是一個插件,需要單獨安裝和設置。你可以利用這個blog詳細解釋如何設置和使用語音標記過濾器。

+0

這正是我一直在尋找的。我在哪裏可以獲得有關其他類型編碼器的更多信息? –

+0

更多關於編碼器的信息[here](http://stackoverflow.com/a/35145238/4604579) – Val

2

您可以使用analysis phonetic plugin來執行該任務。

讓我們創建一個索引使用自定義分析利用該插件:

curl -XPUT localhost:9200/phonetic -d '{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "my_analyzer": { 
      "tokenizer": "standard", 
      "filter": [ 
      "standard", 
      "lowercase", 
      "my_metaphone" 
      ] 
     } 
     }, 
     "filter": { 
     "my_metaphone": { 
      "type": "phonetic", 
      "encoder": "metaphone", 
      "replace": true 
     } 
     } 
    } 
    } 
}' 

現在,讓我們使用新的分析分析你的榜樣。正如你所看到的,plainplane會產生單令牌PLN

curl -XGET 'localhost:9200/phonetic/_analyze?analyzer=my_analyzer&pretty' -d 'plane' 
curl -XGET 'localhost:9200/phonetic/_analyze?analyzer=my_analyzer&pretty' -d 'plain' 

{ 
    "tokens" : [ { 
    "token" : "PLN", 
    "start_offset" : 0, 
    "end_offset" : 5, 
    "type" : "<ALPHANUM>", 
    "position" : 1 
    } ] 
} 

同樣的事情mailmale其產生單令牌ML

curl -XGET 'localhost:9200/phonetic/_analyze?analyzer=my_analyzer&pretty' -d 'mail' 
curl -XGET 'localhost:9200/phonetic/_analyze?analyzer=my_analyzer&pretty' -d 'male' 

{ 
    "tokens" : [ { 
    "token" : "ML", 
    "start_offset" : 0, 
    "end_offset" : 4, 
    "type" : "<ALPHANUM>", 
    "position" : 1 
    } ] 
} 

我用metaphone編碼器,但您可以自由使用任何其他支持的編碼器。你可以找到所有支持的編碼器的更多信息:在Apache Codec documentationmetaphonedouble_metaphonesoundexcaverphonecaverphone1caverphone2refined_soundexcolognebeider_morse

  • 0

    不需要插件的解決方案是使用Synonym Token Filter。例如:

    { 
    "filter" : { 
        "synonym" : { 
         "type" : "synonym", 
         "synonyms" : [ 
          "mail, male", 
          "plane, plain" 
         ] 
        } 
    } 
    

    }

    你也可以把同義詞在一個文本文件,並說明,請參閱我掛一個例子的文檔。