2015-05-20 115 views
1

我們正在實施Elasticsearch並在.NET解決方案中使用.Nest。我們已經創建並加載了包含多個字段的索引。我們希望定義和分析器,當用戶輸入UNV-1234UNV1234時,將爲itemNumber字段生成相同的搜索結果。 itemNumber字段僅限於項目編號,不含其他字詞。但是,商品編號字段可能有一個空格分隔的編號。忽略連字符的Elasticsearch分析器

根據我的搜索,似乎關鍵字分析器將提供所需的結果。這不適合我們。

有人可以提供有關如何最好地完成此任務的信息?

"itemNumber": { 
    "type": "string", 
    "index": "not_analyzed", 
    "fields": { 
     "_english": { 
     "type": "string", 
     "analyzer": "english" 
     }, 
     "_keyword": { 
     "type": "string", 
     "analyzer": "keyword" 
     }, 
     "_standard": { 
     "type": "string", 
     "analyzer": "standard" 
     } 
    } 
} 

回答

0

您需要定義與「關鍵字」標記生成器和模式自定義分析儀更換令牌過濾器,以消除任何特殊字符,並用它爲你的領域。分析儀可定義如下

"analysis" : { 
     "filter" : { 
      "cleanspecial": { 
       "type": "pattern_replace", 
       "pattern": "[^a-zA-Z0-9]", 
       "replacement": "" 
      } 
     }, 
     "analyzer" : { 
      "cleanspecialanalyzer": { 
       "filter": ["cleanspecial"], 
       "type": "custom", 
       "tokenizer": "keyword" 
      } 
     } 
    } 

注意:請驗證模式,我沒有測試過它。

您可以更改映射如下

"itemNumber": { 
    "type": "string", 
    "index": "not_analyzed", 
    "fields": { 
     "_english": { 
     "type": "string", 
     "analyzer": "english" 
     }, 
     "_keyword": { 
     "type": "string", 
     "analyzer": "cleanspecialanalyzer" 
     }, 
     "_standard": { 
     "type": "string", 
     "analyzer": "standard" 
     } 
    } 
} 

搜索可以在球場上發生itemNumber._keyword